excel函數應用:如何用數位函數分段提取身份證信息*下

2019-09-29     部落窩教育h



編按:哈嘍,大家好!在上篇內容中我們說到了用excel提取身份證號碼中的戶籍地址、出生日期、年齡、生肖、星座等內容,今天我們書接上回,繼續帶大家學習excel提取身份證信息的其他操作!

*********

引言:我們繼續上篇生日提取的拓展思路,開始我們今天的內容,保證開篇就有驚喜!

4、生日提醒

生日提醒的問題,作者覺得要分兩部分來說。

(1)有的公司的管理比較人性化,可能每個月都會給當月過生日的員工發一些小禮品,但如果這些小禮品都是生日當天發送,那這一年下來,就是一個很費精力的事情,所以就在每個月中選一天,給本月過生日的員工一起慶生。這個時候,我們可以使用EXCEL進行如下操作:



B43單元格函數:

=IF(--MID(B2,11,2)=MONTH(TODAY()),"本月生日","非本月生日")

講到現在,想必同學們都已經對「--MID(B2,11,2)」函數用法和意義了如指掌了吧?!它用於返回生日的月份,然後與今天的月份作對比,如果相等就返回「本月生日」,否則就返回「非本月生日」,一目了然。

(2)對於重要人物的生日提醒。關於類似的提醒,作者建議大家一定要做到精確到日,類似「倒計時」的提醒,例如下面的示範:



B45單元格函數:

=IF(--TEXT(MID(B2,11,4),YEAR(TODAY())&"-00-00")<=TODAY(),--TEXT(MID(B2,11,4),YEAR(TODAY())+1&"-00-00")-TODAY(),--TEXT(MID(B2,11,4),YEAR(TODAY())&"-00-00")-TODAY())&"天后慶生"

這個函數看著比較複雜(好吧,我承認裡面有一段確實複雜),但是思路其實很簡單,天數=IF(本年生日日期<=今天日期,次年生日日期-今天日期,本年生日日期-今天日期)。

本年生日日期=--TEXT(MID(B2,11,4),YEAR(TODAY())&"-00-00")

次年生日日期=--TEXT(MID(B2,11,4),YEAR(TODAY())+1&"-00-00")

MID(B2,11,4)提取月份日期就不多說了,TEXT函數的第二參數是代表需要轉換的格式表達式,這個參數是可以有函數參與的,例如本例,TODAY()為2019-9-17,YEAR(TODAY())就是2019,YEAR(TODAY())&"-00-00"這樣的表達的格式就是"2019-00-00"(今年的生日日期),同理YEAR(TODAY())+1&"-00-00"代表"2020-00-00"的格式(次年的生日日期),用這個方式就確定了還有多少天慶生。

當然同學們也可以使用函數:=DATE(YEAR(TODAY()),MID(B2,11,2),MID(B2,13,2))來得到身份證中的生日日期,上例就是為了給大家一個其他的函數應用思路,實際工作中,會哪個就用哪個吧。

三、性別判斷及延伸思考

相對於出生日期的話題,性別判斷的話題就顯得有點簡單了。身份證的編碼規則,第15~16位,是各個地區戶籍公安局的編碼,這個我們就不多說了。第17位代表的是性別的代碼,奇數代表男性,偶數代表女性。



B5單元格函數:

=IF(MOD(MID(B2,17,1),2)=1,"男","女")

MID(B2,17,1)提取身份證第17位的代碼,用MOD函數得到除以2的餘數,再用IF函數判斷餘數是否為1,為1則為奇數返回「男」,否則為「女」(一個整數除以2的餘數,除了1就是0)。說到這裡,我們可以額外多說一句,在EXCEL函數中其實是有專門判斷奇偶性的函數——ISODD函數、ISEVEN函數。


利用這兩個函數也是可以判斷性別的,如下圖(注意兩個函數的邏輯返回值所對應的「男」、「女」):



當然EXCEL從來都是一題多解的,也可以用VLOOKUP函數的方式來做,同學們會哪個,擅長哪個,就隨大家方便吧,解決問題就好。



寫了這麼多的內容,有的同學可能會說了,我們這樣一直曝光別人的身份證,應該不太好吧?!

四、判斷身份證號的真偽

在很多情況下,我們都有可能只看到身份證號,而看不到身份證原件,即便看到了身份證原件,沒有專業的身份證讀卡機我們也不好判斷是真是假。那麼本系列最後一部分內容我們就來學習如何使用EXCEL判斷身份證號的真偽。

(1)首先身份證的位數是我們第一步判斷身份證號錄入是否正確的標準。



這是最基本的,如果位數都不對,那就別談其他的了。

(2)第18位的效驗碼

身份證號的第18位碼是一個計算結果值,是用前17位代碼通過複雜的一個計算得到的,了解了這個計算我們就可以驗證身份證號碼的真偽了。

計算步驟:

前17位號碼,每一位乘對應位數的係數,再相加求和,對應碼如下:



將得數除以11求余,餘數和下面的對比表進行對比,對應的上則為「真」,否則為「假」。



就是這麼簡單的兩步而已,但是難點就在於我們要分別取出各個位上的值,如果用輔助列做,這個問題很好解決,今天我們來學習不使用輔助列的做法,如下:



問題揭曉,此身份證號碼是假的,大家可以用真實的身份證號碼驗證一下函數。

B5單元格函數:

{=VLOOKUP(MOD(SUM(MID(B2,ROW(1:17),1)*{7;9;10;5;8;4;2;1;6;3;7;9;10;5;8;4;2}),11),{0,1;1,0;2,"X";3,9;4,8;5,7;6,6;7,5;8,4;9,3;10,2},2,0)=RIGHT(B2)}

輸入完成後,按數組函數的結束鍵CTRL+SHIFT+ENTER三鍵結束。

函數解析:

MID(B2,ROW(1:17),1)利用數組的方式,分別得到身份證前17位的數字,形成一個常量數組,{"5";"1";"1";"5";"0";"2";"1";"9";"9";"1";"0";"3";"2";"2";"3";"1";"8"}。

然後和{7;9;10;5;8;4;2;1;6;3;7;9;10;5;8;4;2}相乘再用SUM求和,通過MOD(值,11)得到餘數,再用VLOOKUP函數在{0,1;1,0;2,"X";3,9;4,8;5,7;6,6;7,5;8,4;9,3;10,2}數列中索引出對照碼;最後和RIGHT(B2)(如果LEFT函數和RIGHT函數的第2參數是1,可以省略)比較,返回邏輯值TRUE就是真身份證號,FALSE則是假身份證號。

***編後語***

​我知道網絡上有很多關於身份證號的文章,但是每次寫都會有不同的感受和新的內容出來,比如第一部分我們使用SUBSTITUTE函數精準提取市、區縣,又如生日提醒裡面的TEXT函數的使用方式,更比如最後的效驗碼問題,這些都不是不好理解的東西。E圖表述的文章,力求讓大家能夠深入淺出,開拓思維,真正地在部落窩學到你想要的知識。

****部落窩教育-MID函數提取身份證信息****

原創:E圖表述/部落窩教育(未經同意,請勿轉載)

更多教程:部落窩教育(www.itblw.com)

微信公眾號:exceljiaocheng

文章來源: https://twgreatdaily.com/Twcjf20BMH2_cNUgl_uf.html