1. 程式人生 > >EXCEL中如何提取身份證出生日期和性別資訊以及檢驗身份證號碼的正確性

EXCEL中如何提取身份證出生日期和性別資訊以及檢驗身份證號碼的正確性

中國居民身份證號碼是一組特徵組合碼,原為15位,現升級為18位,其編碼規則為:

  15位:6位數字常住戶口所在縣市的行政區劃程式碼,6位數字出生日期程式碼,3位數字順序碼。

  18位:6位數字常住戶口所在縣市的行政區劃程式碼,8位數字出生日期程式碼,3位數字順序碼和1位檢驗碼。

  其中3位數字順序碼,是為同一地址碼的同年同月同日出生人員編制的順序號,偶數的為女性,奇數的為男性。

  1、提取籍貫地區的行政區劃程式碼(A2為身份證號,下同)

  15與18位通用:=LEFT(A2,6)

  如果有一個編碼和省份地區的對照表,可以用VLOOKUP函式來提取地區資訊。

  2、提取出生日期資訊 

  15位:=--TEXT(19&MID(A2,7,6),"#-00-00")

  18位:=--TEXT(MID(A2,7,8),"#-00-00")

  15與18位通用:=--TEXT(IF(LEN(A2)=15,19,"")&MID(A2,7,6+IF(LEN(A2)=18,2,0)),"#-00-00")

  簡化公式:=--TEXT((LEN(A2)=15)*19&MID(A2,7,6+(LEN(A2)=18)*2),"#-00-00")

    (請將輸入公式的單元格格式設定為日期格式)

  3、提取性別資訊

  15位:=IF(MOD(RIGHT(A2),2)=1,"男","女")

  18位:=IF(MOD(MID(A2),17,1)=1,"男","女")

  15與18位通用:=IF(MOD(MID(A2,IF(LEN(A2)=15,15,17),1),2)=1,"男","女")

  簡化公式:=IF(MOD(RIGHT(LEFT(A2,17)),2),"男","女")

  4、檢驗身份證號碼的正確性

  18位身份證號碼的最後一位是檢驗碼,它是根據身份證前17位數字依照規則計算出來的,其值0~9或X。一般情況只要有一位數字輸入錯誤,依照規則計算後就會與第18位數不符。當然不排除按錯誤號碼計算後恰好與檢驗碼相符的情況,但這種情況出現的可能性較低。因此,對18位號碼的驗證採用如下公式:

  =MID("10X98765432",MOD(SUMPRODUCT(MID(A2,ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1)=RIGHT(A2,1)

  對於15位身份證,由於沒有檢驗碼,我們只能簡單地去判斷出生日期程式碼是否是一個有效的日期,避免輸入一些像“731302”或“980230“等這樣不存在的日期。

  =ISNUMBER(--TEXT(19&MID(A2,7,6),"#-00-00"))

  綜合15位和18位後的通用公式為:

  =IF(LEN(A2)=18,MID("10X98765432",MOD(SUMPRODUCT(MID(A2,ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1)=RIGHT(A2),IF(LEN(A2)=15,ISNUMBER(--TEXT(19&MID(A2,7,6),"#-00-00"))))

  由於目前15位身份證號碼已經很少了,如果對15位的號碼不需要作進一步的判斷,則公式可以簡化成:

  =IF(LEN(A2)=18,MID("10X98765432",MOD(SUMPRODUCT(MID(A2,ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1)=RIGHT(A2),LEN(A2)=15)

  將上面的公式放到B2單元格,如果結果為TRUE,則身份證號是正確的,結果為FALSE則是錯誤的。

  你也可以將上述公式放在資料有效性中,防止錄入錯誤的身份證號。操作方法:選擇需要輸入身份證的全部單元格區域,比如A2:A10,點選單"資料"-"有效性",在"允許"的下拉框中選擇"自定義",在"公式"輸入上面的15位和18位通用公式,確定以後即可。注意:公式裡的"A2"是你剛才選定要輸入身份證的單元格區域的第一個單元格,如果你是要在C3:C20輸入身份證號,則將公式裡的"A2"改為"C3"。另外,你也可以先設定好某單個單元格的資料有效性(這時公式的A2改為選定的單元格),再用格式刷將其格式刷到其他需要相同設定的單元格。

  5、15位升為18位

  =IF(LEN(A2)=15,REPLACE(A2,7,,19)&MID("10X98765432",MOD(SUMPRODUCT(MID(REPLACE(A2,7,,19),ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1),A2)

  6、18位轉換為15位

  =IF(LEN(A2)=18,LEFT(REPLACE(A2,7,2,),15),A2)

  7、示例       

  表中公式:
  B2 =IF(LEN(A2)=18,MID("10X98765432",MOD(SUMPRODUCT(MID(A2,ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1)=RIGHT(A2),IF(LEN(A2)=15,ISNUMBER(--TEXT(19&MID(A2,7,6),"#-00-00"))))
  C2 =IF(A2<>"",TEXT((LEN(A2)=15)*19&MID(A2,7,6+(LEN(A2)=18)*2),"#-00-00")+0,)
  D2 =IF(A2<>"",IF(MOD(RIGHT(LEFT(A2,17)),2),"男","女"),)
  E2 =IF(A2<>"",DATEDIF(TEXT((LEN(A2)=15)*19&MID(A2,7,6+(LEN(A2)=18)*2),"#-00-00"),TODAY(),"y"),)
  F2 =IF(A2<>"",VLOOKUP(LEFT(A2,2),地區表!A:D,2,),)
  H2 =IF(LEN(A2)=15,REPLACE(A2,7,,19)&MID("10X98765432",MOD(SUMPRODUCT(MID(REPLACE(A2,7,,19),ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1),A2)
  I2 =IF(LEN(A2)=18,LEFT(REPLACE(A2,7,2,),15),A2)


轉自:http://hi.baidu.com/qsddz/item/c8b66053ccbae9d4d58bac4c