2016版excel_用Excel处理身份证信息的技巧,看这篇就够了,建议收藏
工作中,總免不了和身份證打交道。除了用Word表格,我們遇到最多的就是要用Excel來處理身份證信息了,比如:
本文將對(duì)以上六個(gè)需求在Excel中的操作事項(xiàng)進(jìn)行演示,幫助您又快又準(zhǔn)確地處理身份證信息,避免踩坑。
在Excel中錄入身份證信息
乍一看這個(gè)標(biāo)題,似乎不明就里,難道在Excel里錄入身份證也值得拿出來單獨(dú)說?
凡是有此疑問的,要么是您從來沒用Excel處理過身份證,要么您已經(jīng)在處理身份證信息方面是行家里手了。
所以這一部分是針對(duì)從未在Excel中錄入身份證信息的小伙伴寫的。
我們可以試試看在Excel的任意單元格錄入一個(gè)15位或18位的身份證:
如上圖所示,如果是15位還是18位身份證直接錄入到Excel中,結(jié)果無一例外是變成類似于【5.10802E+17】這樣的科學(xué)計(jì)數(shù)法。
如果選中它后,你會(huì)在公式欄看到:
為什么會(huì)這樣?這是因?yàn)镋xcel的一個(gè)坑:它會(huì)把所有超過11位的數(shù)字顯示為科學(xué)計(jì)數(shù)法;它只能顯示15位的數(shù)字,超過15位的數(shù)字會(huì)直接把末尾幾位顯示為0。
一般錄入時(shí),我們很容易就會(huì)發(fā)現(xiàn)這個(gè)坑,從而去尋找解決辦法。
在Excel中錄入時(shí)避免身份證信息變成科學(xué)計(jì)數(shù)法或最后三位數(shù)字變成0的辦法有兩種:
1.錄入身份證信息之前,把Excel的單元格樣式設(shè)置為文本格式,這適合大批量錄入的情況。我一般都是選擇一整列,然后設(shè)置成文本格式。
2.錄入一個(gè)英文狀態(tài)下的單引號(hào),將該單元格強(qiáng)制轉(zhuǎn)變?yōu)槲谋尽_@適合錄入少量身份證信息到Excel中,因?yàn)槊總€(gè)號(hào)碼前都要加這個(gè)單引號(hào),否則結(jié)果就會(huì)出錯(cuò)。
注意上圖中地址欄里身份證最前面的英文單引號(hào),并且注意單元格里身份證號(hào)碼前面并沒有那個(gè)單引號(hào)。如果用LEN()函數(shù)檢查輸入的身份證號(hào)碼,是18位,也就是說剛才輸入的英文單引號(hào)并不是一個(gè)字符,它僅僅是個(gè)文本標(biāo)識(shí)符。
在Excel中安全地處理csv文件中的身份證信息
如果我們的身份證信息來自于某個(gè)系統(tǒng)的數(shù)據(jù)庫,那么它很可能是csv格式保存的。
最容易踩的坑是我們習(xí)慣性地用Excel打開這個(gè)csv文件進(jìn)行處理,然后隨手保存為Excel文件(而不是csv文件),然后把csv文件刪除了。
等你再打開這個(gè)包含身份證信息的Excel文件,你就傻眼了——身份證全部變成科學(xué)計(jì)數(shù)法且18位身份證最后三個(gè)數(shù)字變成0,永遠(yuǎn)無法找回來了,除非那個(gè)csv文件還在回收站里。
那么,csv文件中的身份證要怎么處理才安全(也就是不會(huì)變成科學(xué)計(jì)數(shù)法且18位身份證最后三位不會(huì)變成0)呢?
1.首先,絕對(duì)不要用Excel直接打開包含身份證信息的csv文件,因?yàn)楫?dāng)你打開后身份證信息就已經(jīng)永久地變成科學(xué)計(jì)數(shù)法且18位身份證最后三位變成0了。
2.正確的做法是將其導(dǎo)入到Excel中:在Excel(2016版、2019版或365版)中,點(diǎn)擊【數(shù)據(jù)】選項(xiàng)卡,在【獲取和轉(zhuǎn)換數(shù)據(jù)】命令欄點(diǎn)擊【從文本/csv】,在彈出窗口中找到存儲(chǔ)身份證信息的csv文件點(diǎn)擊并確定。
這時(shí)會(huì)進(jìn)入導(dǎo)入窗口。如果中文顯示異常,請(qǐng)選擇合適的中文編碼,如UTF-8或GB2313之類。
當(dāng)中文顯示正常后,點(diǎn)擊底部的【轉(zhuǎn)換數(shù)據(jù)】,不要點(diǎn)【加載數(shù)據(jù)】,【加載數(shù)據(jù)】的加載結(jié)果還是錯(cuò)的。
點(diǎn)擊【轉(zhuǎn)換數(shù)據(jù)】后,進(jìn)入查詢編輯頁面,你會(huì)發(fā)現(xiàn)身份證信息還是科學(xué)計(jì)數(shù)法:
其原因是PowerQuery自動(dòng)幫我們創(chuàng)建了更改格式的步驟,我們要在右側(cè)的查詢步驟列表里刪除這一步:
這時(shí)查詢步驟列表應(yīng)該是這樣子的:
然后我們就看到結(jié)果正確了:
3.將結(jié)果加載到Excel的sheet中:
選擇【關(guān)閉并上載至】,將其加載到工作表:
4.如果還要對(duì)身份證進(jìn)行其他操作,如校驗(yàn)、提取出生年月日信息、計(jì)算年齡、查找所屬行政區(qū)劃信息,建議加載之前一并處理后,再選擇加載到工作表中。
判斷性別
我們知道,身份證中的性別信息由倒數(shù)第二位確定:如果倒數(shù)第二位是奇數(shù),則代表男性,如果是偶數(shù),則代表女性。所以,提取性別信息也就是判斷身份證倒數(shù)第二位數(shù)字的奇偶來實(shí)現(xiàn)。
根據(jù)前面的分析,我們知道,身份證中的性別信息提取,有兩個(gè)關(guān)鍵:一是找到身份證倒數(shù)第二位,二是判斷其奇偶。
找到身份證倒數(shù)第二位我們用Excel的MID()函數(shù):
=MID(A2,17,1)
奇偶判斷用MOD()函數(shù):
=MOD(MID(A3,17,1),2)
然后用IF來判斷,如果是奇數(shù),就代表男性,如果是偶數(shù),就代表女性:
=IF(MOD(MID(A2,17,1),2)=1,"男","女")
在PowerQuery中思路類似:
引入數(shù)據(jù)源之后,以新增一列的方式來提取性別:
= Table.AddColumn(更改的類型, "性別", each
if
Number.Mod(Number.From(Text.At([身份證],16)),2)=1
then
"男"
else
"女"
)
注意,我們使用的M函數(shù)是Text.At(),索引用的是16,在Excel公式中我們用的索引是17,原因就在于PowerQuery的索引是從0開始計(jì)算的。
這樣一來,從Excel提取身份證中包含的信息操作就介紹完了。還有沒有遺漏的呢?如果有的話請(qǐng)補(bǔ)充。
提取生日信息
當(dāng)身份證在Excel中正確顯示后,就可以對(duì)其進(jìn)行下一步處理了。比如提取其中的生日信息。
這里有兩種方法直接在Excel中提取年月日信息:
1.CTRL+E快速填充法。即先手工提取第一個(gè)生日,然后按CTRL+E,進(jìn)行快速填充,則Excel會(huì)智能地將之后每一行的生日信息提取出來。
但是這種方法有個(gè)限制,就是你只能提取其中的信息,不能在提取的同時(shí)進(jìn)行格式化,比如把提取出的生日信息變成日期格式(1979/8/28)。有興趣的可以試試看在第一行輸入1979/8/28,再按CTRL+E,會(huì)發(fā)生什么。
2.推薦做法是利用Excel的內(nèi)置函數(shù)MID()函數(shù)。這樣就可以在提取生日信息的同時(shí)將其格式化為標(biāo)準(zhǔn)日期格式:
=MID(A2,7,4)&"/"&MID(A2,11,2)&"/"&MID(A2,13,2)
原理也并不復(fù)雜:身份證信息從第7位開始的四個(gè)數(shù)字是年份信息,之后的兩位是月份信息,再之后的兩位是日期信息,提取出年月日之后用【&】符號(hào)將其與【/】進(jìn)行連接,形成標(biāo)準(zhǔn)的日期格式。
這里也可以用分列的方式直接分列成日期格式。但多了一步操作。
3.如果需要經(jīng)常提取身份證中的生日信息,那么建議在PowerQuery中進(jìn)行。由于數(shù)據(jù)源可能在數(shù)據(jù)庫、可能在單獨(dú)的Excel文件中,也可能在CSV文件中,或者在別的地方,引入數(shù)據(jù)源的步驟我跳過。假設(shè)已經(jīng)將身份證信息引入到PowerQuery且格式正確:
PowerQuery中提取生日信息比Excel簡單多了,直接用Text.Middle()函數(shù):
= Table.AddColumn(更改的類型, "生日", each Text.Middle([身份證],6,8))
這里細(xì)心的讀者會(huì)發(fā)現(xiàn),前面在Excel中提取生日時(shí),說出生年信息是從身份證第7位開始,怎么在PowerQuery中,用了6?其實(shí)是因?yàn)镻owerQuery中的默認(rèn)index值是從0開始,所以第七位在PowerQuery中表示為6。
然后直接選中【生日】這一列,更改其格式為【日期】,就完成了:
細(xì)心的讀者可能又會(huì)發(fā)現(xiàn),在Excel中,【19790828】是無法直接變成日期格式的,必須借助【/】將年月日分開才行。但是PowerQuery中可以直接把【19790828】這樣的識(shí)別為日期,這也是PowerQuery比Excel強(qiáng)大的證據(jù)之一。
計(jì)算年齡
當(dāng)提取出生日信息后,計(jì)算年齡就很簡單了。
1.在Excel中計(jì)算年齡:
=YEAR(NOW())-YEAR([@MID函數(shù)提取生日])
2.在PowerQuery中計(jì)算年齡與Excel中計(jì)算類似:
= Table.AddColumn(更改的類型1, "年齡", each Date.Year(DateTime.LocalNow())-Date.Year([生日]))
校驗(yàn)身份證
校驗(yàn)身份證信息的原理很簡單,公式也很簡單,就是很長很長(無論是Excel還是PowerQuery)。
Excel中校驗(yàn)身份證信息。
=IF(LEN([@身份證])=18,
IF(RIGHT(A3)=CHOOSE(MOD(
SUM((MID(A3,1,1)+MID(A3,11,1))*7
+(MID(A3,2,1)+MID(A3,12,1))*9
+(MID(A3,3,1)+MID(A3,13,1))*10
+(MID(A3,4,1)+MID(A3,14,1))*5
+(MID(A3,5,1)+MID(A3,15,1))*8
+(MID(A3,6,1)+MID(A3,16,1))*4
+(MID(A3,7,1)+MID(A3,17,1))*2
+MID(A3,8,1)+MID(A3,9,1)*6
+MID(A3,10,1)*3),11)+1,1,0,"X",9,8,7,6,5,4,3,2),"Y","N"),
"位數(shù)錯(cuò)誤,無法校驗(yàn)")
還有其他公式也可以校驗(yàn),原理類似,比如:
=IF(LOOKUP((LEFT(A5,1)*7+MID(A5,2,1)*9+MID(A5,3,1)*10+MID(A5,4,1)*5+MID(A5,5,1)*8+MID(A5,6,1)*4+MID(A5,7,1)*2+MID(A5,8,1)+MID(A5,9,1)*6+MID(A5,10,1)*3+MID(A5,11,1)*7+MID(A5,12,1)*9+MID(A5,13,1)*10+MID(A5,14,1)*5+MID(A5,15,1)*8+MID(A5,16,1)*4+MID(A5,17,1)*2)-ROUNDDOWN((LEFT(A5,1)*7+MID(A5,2,1)*9+MID(A5,3,1)*10+MID(A5,4,1)*5+MID(A5,5,1)*8+MID(A5,6,1)*4+MID(A5,7,1)*2+MID(A5,8,1)+MID(A5,9,1)*6+MID(A5,10,1)*3+MID(A5,11,1)*7+MID(A5,12,1)*9+MID(A5,13,1)*10+MID(A5,14,1)*5+MID(A5,15,1)*8+MID(A5,16,1)*4+MID(A5,17,1)*2)/11,0)*11,{0,1,2,3,4,5,6,7,8,9,10},{"1","0","x","9","8","7","6","5","4","3","2"})=RIGHT(A5,1),"OK","Wrong")
2.PowerQuery中校驗(yàn)身份證信息,詳見我的百家號(hào)文章《用PowerQuery快速校驗(yàn)Excel表格中的身份證信息》。
將15位身份證號(hào)碼升級(jí)為18位
雖然現(xiàn)在15位身份證號(hào)碼基本絕跡,但是偶爾還會(huì)碰到。
我們可以根據(jù)身份證信息編碼規(guī)則(本來這里應(yīng)該有鏈接,便于跳轉(zhuǎn),但是百家號(hào)不允許給第三方鏈接,所以感興趣的讀者只有自己去百度搜索了),將15位身份證號(hào)碼自動(dòng)升級(jí)為18位。
假設(shè)身份證信息在A2單元格,我們首先要判斷其位數(shù)是不是15位,如果是15位才需要轉(zhuǎn)換。
而15位轉(zhuǎn)18位身份證的轉(zhuǎn)換公式很長很長(原因是身份證編碼規(guī)則很長很長):
=IF(LEN(A2)=15, (REPLACE(A2,7,,19))&(INDEX({1,0,"X",9,8,7,6,5,4,3,2},1,(MOD(SUM(MID(REPLACE(A2,7,,19),1,1)*7+MID(REPLACE(A2,7,,19),2,1)*9+MID(REPLACE(A2,7,,19),3,1)*10+MID(REPLACE(A2,7,,19),4,1)*5+MID(REPLACE(A2,7,,19),5,1)*8+MID(REPLACE(A2,7,,19),6,1)*4+MID(REPLACE(A2,7,,19),7,1)*2+MID(REPLACE(A2,7,,19),8,1)*1+MID(REPLACE(A2,7,,19),9,1)*6+MID(REPLACE(A2,7,,19),10,1)*3+MID(REPLACE(A2,7,,19),11,1)*7+MID(REPLACE(A2,7,,19),12,1)*9+MID(REPLACE(A2,7,,19),13,1)*10+MID(REPLACE(A2,7,,19),14,1)*5+MID(REPLACE(A2,7,,19),15,1)*8+MID(REPLACE(A2,7,,19),16,1)*4+MID(REPLACE(A2,7,,19),17,1)*2),11))+1)),A2)
上面的公式中,我用IF判斷了身份證長度,只有15位的才會(huì)升級(jí)成18位的,已經(jīng)是18位的不會(huì)有任何改變。
我建議先判斷身份證是否正確,然后對(duì)正確的身份證信息進(jìn)行升級(jí)轉(zhuǎn)換操作。
PowerQuery的操作略過。
獲取身份證中的行政區(qū)劃信息
從身份證獲取行政區(qū)劃信息,并沒有難度。關(guān)鍵是要知道身份證中的行政區(qū)劃信息包含在那一段數(shù)字中,以及在哪里可以找到行政區(qū)劃信息。
1.身份證信息中的行政區(qū)劃信息體現(xiàn)在前6個(gè)數(shù)字中,具體到區(qū)縣集別。
2.獲取最新的全國行政區(qū)劃信息。由于百家號(hào)不允許給第三方鏈接,而獲取最新行政區(qū)域的PowerQuery代碼必須從國家民政部網(wǎng)站去獲取,因此建議百度搜索【如何用powerbi自動(dòng)獲取最新的全國行政區(qū)劃信息】,按照其中的操作即可。
3.如何根據(jù)身份證前六位獲取行政區(qū)劃信息。在Excel中用vlookup函數(shù)即可。在PowerQuery中使用Table.Join()函數(shù),詳見《處理所有Excel數(shù)據(jù)重復(fù)相關(guān)問題,看這一篇就夠了》。
獲取身份證有效年限信息
獲取身份證有效年限信息,是很困難的一個(gè)操作。其實(shí)和Excel關(guān)系不大。
我列出兩種思路供參考:
結(jié)語
文章已經(jīng)很長很長了,但是全面總結(jié)了身份證信息在Excel中處理的所有詳情,如果有遺漏,請(qǐng)您在評(píng)論中補(bǔ)充。
如果此文對(duì)您有用,建議收藏和轉(zhuǎn)發(fā)。
如果您希望獲取更多辦公效率提升的方法、工具和相關(guān)資料,請(qǐng)您關(guān)注我,謝謝。
總結(jié)
以上是生活随笔為你收集整理的2016版excel_用Excel处理身份证信息的技巧,看这篇就够了,建议收藏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三星正在研发智能戒指,智能戒指当然少不了
- 下一篇: 通过不断重置学习率来逃离局部极值点