中國居民身份證號碼是一組特徵組合碼,原為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