EXCEL身份证号码校验以及提取基本信息
文章目錄
- 前言
- 身份證號校驗
- 校驗規則
- EXCEL實現
- 性別提取
- 籍貫提取
- 出生年月提取
前言
我們的居民身份證作為我們國家每個人唯一的身份標識,其設計十分巧妙,18位的身份證號包含了許多信息,并且為了防止身份證錄入錯誤,還提供了一種可靠的校驗方式。
順帶介紹一下我們身份證的構成。
我們以500225199203026858為例
| 500225 | 行政區域代碼 |
| 19920302 | 出生年月 |
| 685 | 同一地區同一天出生的順序碼(奇數男;偶數女) |
| 8 | 校驗碼 |
身份證號校驗
校驗規則
| 系數 AiA_iAi? | 7 | 9 | 10 | 5 | 8 | 4 | 2 | 1 | 6 | 3 | 7 | 9 | 10 | 5 | 8 | 4 | 2 | 校驗碼 |
計算公式:余數=∑117(wi?Ai)%11余數=\sum_{1}^{17}(w_i*A_i)\%11余數=∑117?(wi??Ai?)%11
根據余數區查詢對應得校驗碼表
| 校驗碼 | 1 | 0 | X | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
以上就是身份證的校驗。
EXCEL實現
我們需要在EXCEL中實現這個校驗,在輸入身份證號后能夠去校驗并且能夠進行提示
如圖所示:
在身份證驗證結果中輸入公式:
首先解釋一下幾個關鍵的函數:
INDIRECT(引用區域,引用格式):
- 解釋: 用于引用,一般分為兩種情況,引用文本或者引用內容,第二個參數缺省值為True。
- 例如 對于B2 (此單元格的內容為A1),如果在某個單元格輸入=INDIRECT(B2 ),則得到A1的實際值;如果輸入=INDIRECT(“B2” ),則得到B2這個文本值
- 這里主要是用于以文本格式
MID(text, start_num, num_chars):
- 從一個字符串中截取出指定數量的字符
ROW(refrence):
- 獲取引用的單元格的行號
- 這里的用法相當巧妙,ROW(INDIRECT(“1:17”)生成了1…17的行號,生成一個數組{1;2;…17}
SUMPRODUCT(array1, [array2], [array3], …):
- 數組對應相乘再求和。
MOD(a,b)
-a/b求余
IF函數之流不必解釋了,進行一頓操作之后,將計算出來的校驗碼與身份證號中的最后一位RIGHT(身份證號)進行相等判斷,即可得出身份證是否爭取輸入身份證號。
性別提取
身份號中的性別是順序碼的奇偶性進行判斷的,奇數分配給男性,偶數分配給女性,于是,只需要提取第17位號碼,進行2的求余,若為1,則為男性,反之,則為女性。
上代碼:
籍貫提取
身份證號的前5位為行政區域代碼,直接查表即可。但是存在一個不好的地方就是,此代碼隨著行政區域的變動而變動,例如在,1997年前,重慶未直轄,大足的代碼就是510230,后來直轄,變成了500225,再到前幾年合并雙橋區升為大足區,改為500111。所以如果登記不同年齡階段的人,那么我們就不能用同一張代碼表。
我介紹一下怎么提取。
首先下載一張比較完全的行政區域代碼表鏈接: 示例文檔 提取碼: tpgu ,此文檔中的存在一張17年的表,可直接使用。
利用vlookup函數進行查詢填充。
具體代碼:
出生年月提取
出生年月提取就很好理解了,直接利用DATE函數,分別提取年/月/日進行提取。
總結
以上是生活随笔為你收集整理的EXCEL身份证号码校验以及提取基本信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android:layout_weigh
- 下一篇: 什么是DNS缓存投毒?有哪些危害?