第一篇:SQLServer中獲取18位身份證號碼校驗碼的函數(shù)
在SQL Server中編寫獲取18位身份證的校驗碼函數(shù)
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[fn_getChkVal](@IDCardNo nvarchar(18))RETURNS nvarchar(1)AS BEGIN Declare @iSum integer,@iMod integer if len(@IDCardNo)<>18 return '' if LEFT(@IDCardNo,17)like '%[^0-9]%' RETURN ''--判斷1-17位是否為數(shù)字0-9,如果不是退出
set @iSum= cast(substring(@IDCardNo,1,1)as int)*7 set @iSum=@iSum+cast(substring(@IDCardNo,2,1)as int)*9 set @iSum=@iSum+cast(substring(@IDCardNo,3,1)as int)*10 set @iSum=@iSum+cast(substring(@IDCardNo,4,1)as int)*5 set @iSum=@iSum+cast(substring(@IDCardNo,5,1)as int)*8 set @iSum=@iSum+cast(substring(@IDCardNo,6,1)as int)*4 set @iSum=@iSum+cast(substring(@IDCardNo,7,1)as int)*2 set @iSum=@iSum+cast(substring(@IDCardNo,8,1)as int)*1 set @iSum=@iSum+cast(substring(@IDCardNo,9,1)as int)*6 set @iSum=@iSum+cast(substring(@IDCardNo,10,1)as int)*3 set @iSum=@iSum+cast(substring(@IDCardNo,11,1)as int)*7 set @iSum=@iSum+cast(substring(@IDCardNo,12,1)as int)*9 set @iSum=@iSum+cast(substring(@IDCardNo,13,1)as int)*10 set @iSum=@iSum+cast(substring(@IDCardNo,14,1)as int)*5 set @iSum=@iSum+cast(substring(@IDCardNo,15,1)as int)*8 set @iSum=@iSum+cast(substring(@IDCardNo,16,1)as int)*4 set @iSum=@iSum+cast(substring(@IDCardNo,17,1)as int)*2
set @iMod=@iSum % 11
return substring('10X98765432',@imod+1,1)END
第二篇:身份證號碼函數(shù)
用vlookup函數(shù),及其他各項功能,通過身份證號得出了出生日期、性別、戶籍所在地等多項信息,并加入了身份證號正確性驗證機制和15位、18位號碼的轉(zhuǎn)換功能。
詳細制作步驟
要想了解身份證的秘密,首先讓我們了解一下我國現(xiàn)行的公民身份證標準。1.我國現(xiàn)行使用公民身份證號碼有兩種標準。2.15位身份證號碼(六位數(shù)字地址碼,六位數(shù)字出生日期碼,三位數(shù)字順序碼)。
3.18位身份證號碼(六位數(shù)字地址碼,八位數(shù)字出生日期碼,三位數(shù)字順序碼和
一位數(shù)字校驗碼)。
4.5.地址碼表示編碼對象常住戶口所在縣(市、旗、區(qū))的行政區(qū)劃代碼。
6.日期碼表示編碼對象出生的年、月、日,其中年份用四位數(shù)字表示,年、月、日之間不用分隔符。
7.順序碼表示同一范圍內(nèi)對同年、月、日出生的人員編定的順序號。奇數(shù)分給男性,偶數(shù)分給女性。
8.校驗碼是根據(jù)前面十七位數(shù)字碼計算出來的檢驗碼。
復制代碼
了解了以上知識后,讓我們來制作Excel表。
1.新建一個Excel文檔,2.將Sheet1重命名為“身份證信息”,在第1行各列中依次輸入“身份證號碼、十五位身份證號碼、十八位身份證號碼、性別、出生日期、年齡、省份、市、區(qū)縣”等文字,并將“出生日期”列設置為日期(yyyy.mm.dd)格式,其余列
設置為文本格式。
3.將Sheet2重命名為“區(qū)域信息”,從國家統(tǒng)計局下載到最新縣及縣以上行政
區(qū)劃代碼,經(jīng)整理后分別導入到“區(qū)域信息”的A、B兩列中,以便查詢。
復制代碼
到此,Excel表框架搭建完成,我們來寫入函數(shù)完成查詢。
第一步 判斷號碼是否為正確的身份證號
一個正確的身份證號碼,要符合以下幾個標準:
①應為15位或18位;
②要包含數(shù)字(0-9)或字符(X);
③18位身份證號最后一位是真正的校驗碼。
如果上面三個條件都滿足,則是正確的身份證號。
我們利用Excel單元格的“有效性”限制來完成校驗。
具體方法是選擇“身份證信息”表,全選“身份證號碼”列,選擇“數(shù)據(jù)-有效性”菜單命令,在彈出的窗口“設置”標簽中,將有效性條件的“允許”設置為“自定義”、“公式”
設置為
=
OR(LEN(A2)=15,IF(LEN(A2)=18,MID(“10X98765432”,MOD(SUM(MID(A2,ROW(INDIRECT(“1:17”)),1)*2^(18-ROW(INDIRECT(“1:17”)))),11)+1,1)=RIGHT(A2))),如圖一。
在“出錯警告”標簽中,設置出錯提示信息,如圖二。
第二步 15位和18位身份證號碼的互換
具體方法是選擇“身份證信息”表,在B2單元格中輸入
=IF(LEN(A2)=15,A2,LEFT(REPLACE(A2,7,2,),15));
在C2單元格中輸入
{=IF(LEN(A3)=15,REPLACE(A3,7,19)&MID(“10X98765432”,MOD(SUM(MID(REPLACE(A3,7,19),ROW(INDIRECT(“1:17”)),1)*2^(18-ROW(INDIRECT(“1:17”)))),11)+1,1),A3)} 這里要注意是數(shù)組!
第三步 判斷性別
如果是15位的,則取最后一位;
如果是18位的號,則取倒數(shù)第二位;
最后判斷該數(shù)值的奇偶性即可。
具體方法是選擇“身份證信息”表,在D2單元格中輸入
=IF(A2<>“",IF(MOD(RIGHT(LEFT(A2,17)),2),”男“,”女“),)
第四步 判斷出生日期
如果是15位的,則取第7至12位,在年份數(shù)前加上“19”;
如果是18位的,則直接取第7至14位;
具體方法是選擇“身份證信息”表,在E2單元格中輸入
=IF(A2<>”“,TEXT((LEN(A2)=15)*19&MID(A2,7,6+(LEN(A2)=18)*2),”#-00-00“)+0,)
第五步 判斷年齡
這里利用一個Excel的隱藏函數(shù) DATEDIF()
基本語法: =DATEDIF(開始日期,結(jié)束日期,單位代碼),用“Y”來表示年份。具體方法是選擇“身份證信息”表,在F2單元格中輸入
=IF(A2<>”“,DATEDIF(TEXT((LEN(A2)=15)*19&MID(A2,7,6+(LEN(A2)=18)*2),”#-00-00“),TODAY(),”Y“),)
第六步 判斷籍貫,包括省份、市、區(qū)縣
這是本期比賽最難的一部分,關鍵在于如何多重判斷省份、市、區(qū)縣信息。
首先要知道地址碼的構(gòu)成。代碼前兩位是省或直轄市代碼,中間兩位是市代碼,最后兩位是區(qū)縣代碼。
其次是數(shù)據(jù)存放。“區(qū)域信息”表中已經(jīng)存放了查詢所需的數(shù)據(jù),將數(shù)據(jù)區(qū)命名為“Code”以便查詢。如圖三
最后利用VLOOKUP函數(shù)來查詢數(shù)據(jù)。
基本語法:=VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
具體方法是選擇“身份證信息”表,在G2單元格中輸入=IF(A2<>”“,VLOOKUP(LEFT(A2,2)&”0000“,code,2,),)
在G2單元格中輸入=IF(A2<>”“,VLOOKUP(LEFT(A2,4)&”00“,code,2,),)
在G2單元格中輸入=IF(A2<>”",VLOOKUP(LEFT(A2,6),code,2,),)
最后一步 根據(jù)需要拖拽
剛才所寫的公式只是在第2行寫入的,大家可以根據(jù)需要向下拖拽,具體方法略去。
第三篇:身份證信息獲取函數(shù)
、根據(jù)身份證號碼求性別:=IF(LEN(B2)=15,IF(MOD(VALUE(RIGHT(B2,3)),2)=0,“女”,“男”),IF(LEN(B2)=18,IF(MOD(VALUE(MID(B2,15,3)),2)=0,“女”,“男”),“身份證錯”))
2、根據(jù)身份證號碼求出生年月:=IF(LEN(B2)=15,CONCATENATE(“19”,MID(B2,7,2),“.”,MID(B2,9,2)),IF(LEN(B2)=18,CONCATENATE(MID(B2,7,4),“.”,MID(B2,11,2)),“身份證錯”))
3、根據(jù)身份證號碼求年齡:=IF(LEN(B2)=15,year(now())-1900-VALUE(MID(B2,7,2)),if(LEN(B2)=18,year(now())-VALUE(MID(B2,7,4)),“身份證錯”))
一、分析身份證號碼
其實,身份證號碼與一個人的性別、出生年月、籍貫等信息是緊密相連的,無論是15位還是18位的身份證號碼,其中都保存了相關的個人信息。
15位身份證號碼:第7、8位為出生年份(兩位數(shù)),第9、10位為出生月份,第11、12位代表出生日期,第15位代表性別,奇數(shù)為男,偶數(shù)為女。
18位身份證號碼:第7、8、9、10位為出生年份(四位數(shù)),第11、第12位為出生月份,第13、14位代表出生日期,第17位代表性別,奇數(shù)為男,偶數(shù)為女。
例如,某員工的身份證號碼(15位)是***,那么表示1972年8月7日出生,性別為女。如果能想辦法從這些身份證號碼中將上述個人信息提取出來,不僅快速簡便,而且不容易出錯,核對時也只需要對身份證號碼進行檢查,肯定可以大大提高工作效率。
二、提取個人信息
這里,我們需要使用IF、LEN、MOD、MID、DATE等函數(shù)從身份證號碼中提取個人信息。如圖1所示,其中員工的身份證號碼信息已輸入完畢(C列),出生年月信息填寫在D列,性別信息填寫在B列。
1.提取出生年月信息
由于上交報表時只需要填寫出生年月,不需要填寫出生日期,因此這里我們只需要關心身份證號碼的相應部位即可,即顯示為“7208”這樣的信息。在D2單元格中輸入公式“=IF(LEN(C2)=15,MID(C2,7,4),MID(C2,9,4))”,其中:
LEN(C2)=15:檢查C2單元格中字符串的字符數(shù)目,本例的含義是檢查身份證號碼的長度是否是15位。
MID(C2,7,4):從C2單元格中字符串的第7位開始提取四位數(shù)字,本例中表示提取15位身份證號碼的第7、8、9、10位數(shù)字。
=MID(F2,7,4)&“-”&MID(F2,11,2)&“-”&MID(F2,13,2)
MID(C2,9,4):從C2單元格中字符串的第9位開始提取四位數(shù)字,本例中表示提取18位身份證號碼的第9、10、11、12位數(shù)字。
IF(LEN(C2)=15,MID(C2,7,4),MID(C2,9,4)):IF是一個邏輯判斷函數(shù),表示如果C2單元格是15位,則提取第7位開始的四位數(shù)字,如果不是15位則提取自第9位開始的四位數(shù)字。
如果需要顯示為“70年12月”這樣的格式,請使用DATE格式,并在“單元格格式→日期”中進行設置。
2.提取性別信息
由于報表中各位員工的序號編排是按照上級核定的編制進行的,因此不可能按照男、女固定的順序進行編排,如果一個一個手工輸入的話,既麻煩又容易出錯例如性別信息統(tǒng)一在B列填寫,可以在B2單元格中輸入公式
“=IF(MOD(IF(LEN(F2)=15,MID(F2,15,1),MID(F2,17,1)),2)=1,“男”,“女”)”,其中:
LEN(C2)=15:檢查身份證號碼的長度是否是15位。
MID(C2,15,1):如果身份證號碼的長度是15位,那么提取第15位的數(shù)字。
MID(C2,17,1):如果身份證號碼的長度不是15位,即18位身份證號碼,那么應該提取第17位的數(shù)字。
MOD(IF(LEN(C2)=15,MID(C2,15,1),MID(C2,17,1)),2):用于得到給出數(shù)字除以指定數(shù)字后的余數(shù),本例表示對提出來的數(shù)值除以2以后所得到的余數(shù)。
IF(MOD(IF(LEN(C2)=15,MID(C2,15,1),MID(C2,17,1)),2)=1,“男”,“女”):如果除以2以后的余數(shù)是1,那么B2單元格顯示為“男”,否則顯示為“女”。
第四篇:網(wǎng)上服務平臺“身份證號碼升位”操作指南范文
牛哞哞博客關注西安市雁塔區(qū)社會保險服務辦事指南
網(wǎng)上服務平臺“身份證號碼升位”操作指南
一、總體操作流程
首先,通過“人員管理”模塊下“在職人員身份證號升位”功能和“離退休人員身份證號升位”功能分別對本單位在職、退休人員的15位身份證號進行升位。其次,升位成功后,通過“數(shù)據(jù)交互”模塊下“數(shù)據(jù)交互”功能進行數(shù)據(jù)上報。最后,攜帶相關資料到經(jīng)辦機構(gòu)進行審核。
二、在職人員身份號碼升位
第一步,點擊“在職人員身份證號升位”功能。牛哞哞博客關注西安市雁塔區(qū)社會保險服務辦事指南
第二步,選擇導盤類型為“導出”,點擊“查詢”按鈕。這里會將本單位下所有在職身份證號為15位的人員列出,并按照公安部門規(guī)則對其分別擬生成18位身份證號信息。
第三步,點擊“生成”按鈕。牛哞哞博客關注西安市雁塔區(qū)社會保險服務辦事指南
這里有兩個列表,“身份證號碼升位成功信息”列表展示的是所有15位身份證號可以按照公安部門規(guī)則生成18位身份證號的信息內(nèi)容。“身份證號碼升位失敗信息”列表展示的是不能按照公安部門規(guī)則生成18位身份證號的信息內(nèi)容。第四步,導出升級成功信息。
牛哞哞博客關注西安市雁塔區(qū)社會保險服務辦事指南
導出內(nèi)容為excel表格,將其保存下來。第五步,對導出的excel表格進行編輯。
表格中將本單位戶下身份證號為15位人員以及對應的擬升位信息列示出來。大家需要完成工作有:
1、將擬生成身份證號升位信息逐一進行核對。
2、保留核對正確的人員信息,刪除核對不正確人員信息。
3、全部核對完成后,將修改后的文件予以保存。
第六步,點擊“在職人員身份證號升位”功能,將導盤類型選擇為“導入”。牛哞哞博客關注西安市雁塔區(qū)社會保險服務辦事指南
在導入文件處,通過瀏覽選擇已進行核對的excel表格,并點擊“查詢”按鈕。
這里“身份證升位成功信息”列表展示就是本單位經(jīng)核對后保留的擬升位信息。點擊“確定”按鈕,導入成功。第七步,點擊“數(shù)據(jù)上報”功能。牛哞哞博客關注西安市雁塔區(qū)社會保險服務辦事指南
“待上報業(yè)務信息匯總列表”列示的為擬上報信息,如果上報前發(fā)現(xiàn)報送內(nèi)容有誤,可通過
進行撤銷。如果無誤,點擊“數(shù)據(jù)上報”按鈕,并攜帶相關資料到經(jīng)辦機構(gòu)進行審核。
三、離退休人員身份號碼升位
通過“離退休人員身份號碼升位”功能進行離退人員15位身份牛哞哞博客關注西安市雁塔區(qū)社會保險服務辦事指南
證號升18位,具體操作,同“在職人員身份號碼升位”操作步驟。
四、注意事項
1、導出的升級成功excel表格,僅允許進行對正確的保留操作,對不正確的刪除對應行操作,不允許進行身份證號等信息的變更操作。
2、對于核實出不正確的升位信息,在過原渠道辦理變更手續(xù)。
excel表格刪除后,需通
第五篇:從身份證號碼中摳出個人信息
從身份證號碼中“摳出”個人信息
貴州省余慶中學楊松
最近,學校要求對全校教師的個人資料進行收集,其中包含:姓名,性別,年齡,出生日期,身份證號碼??檔案室的老師這兩天在加班加點的忙碌,一項一項的輸入。我看在眼里急在心里,要是能直接把身份證號碼中的出生日期和性別提取出來那多好啊。這樣既可避免出錯又能減輕多少負擔啊!
統(tǒng)計表的格式如圖:
經(jīng)過分析,反復實踐操作,終于找到了解決辦法。
一、身份證號的組成我國公民身份號碼是由十七位數(shù)字本體碼和一位數(shù)字校驗碼組成。排列順序從左至右依次為:六位數(shù)字地址碼,八位數(shù)字出生日期碼,三位數(shù)字順序碼和一位數(shù)字校驗碼(15位的身份證號碼中出生日期碼為6位,年份中省去了19兩數(shù),同時也無數(shù)字校驗碼)。第17位代表性別,奇數(shù)為男,偶數(shù)為女(15位身份證中的第15位代表性別)。
如某老師的身份證號碼(18位)是***013,那么表示1968年12月10日出生,性別為男。
二、解決思路
1、分別將年、月、日及性別位的數(shù)字從身份證號碼中提取出來;
2、運用公式將出生日期合并成指定的格式;
3、計算年齡,判斷性別。
三、實施步驟
主要用到EXCEL中的函數(shù)MID、IF、LEN、CONCATENATE、MOD。MID:提取指定位置的字符串
IF:邏輯判斷,結(jié)果為真或假
LEN:計算指定字符串的長度
CONCATENATE:將多個字符串合并成一個字符串
MOD:兩數(shù)相除取余數(shù)。
(一)先將表格設計成如圖所示的樣式
(二)取年份
在D2單元格中輸入公式
“=IF(LEN(C4)=18,MID(C4,7,4),CONCATENATE(“19”,MID(C4,7,2))),其中:
LEN(C2)=18:檢查C2單元格中字符串的字符數(shù),本例的含義是檢查
身份證號碼的長度是否是18位。
MID(C2,7,4):從C2單元格中字符串的第7位開始提取四位數(shù)字,本例中表示提取18位身份證號碼的第7、8、9、10位數(shù)字。
MID(C2,7,2):從C2單元格中字符串的第7位開始提取兩位數(shù)字,本例中表示提取15位身份證號碼的第7、8位數(shù)字。
CONCATENATE(“19”,MID(C4,7,2)):用字符“19”與提取的字符進行合并,本例表示在提取的兩位年份前加上“19”使其變?yōu)椋次粩?shù)的年份。例:使78變成1978。
=IF(LEN(C4)=18,MID(C4,7,4),CONCATENATE(“19”,MID(C4,7,2))):IF是一個邏輯判斷函數(shù),表示如果C2單元格是18位,則提取第7位開始的四位數(shù)字,否則提取自第7位開始的兩位數(shù)字,并在前面加上“19”使其變?yōu)檎5模次粩?shù)字的年份。即取得年份。
(三)取月、日和性別位的值
同理在E2、F2、G2中輸入對應公式
在E2單元格中輸入公式“=IF(LEN(C2)=18,MID(C2,11,2),MID(C2,9,2))”
判斷身份證號碼是18位還是15位。18位身份證號碼的第11、1
2位為月份,15位的第9、10位為月份。
――取得月份
在F2單元格中輸入公式“=IF(LEN(C2)=18,MID(C2,13,2),MID(C2,11,2))”
――取得日
在G2單元格中輸入公式“=IF(LEN(C2)=18,MID(C2,17,1),MID(C2,15,1))”
――取得性別位的數(shù)值
(四)將年月日合并成指定的日期格式
在H2單元格中輸入公式“=CONCATENATE(D2,“-”,E2,“-”,F2)”。
該公式表示將多個字符串合并成一個字符串。本例是將單元格D2、E2、F2中的內(nèi)容按指定格式(yyyy-mm-dd)合并成一個字符串(若日期格式為“XXXX
年XX月XX日”,只需將公式改為“=CONCATENATE(D2,“年”,E2,“月”,F2,”日”)”即可)。
(五)判斷性別
在I2單元格中輸入公式“=IF(MOD(G2,2)=1,“男”,“女”)”
其中:
MOD(G2,2)=1:用G2單元格的內(nèi)容與2相除取余數(shù),本例是判斷性別位上的數(shù)是奇數(shù)還是偶數(shù)(余數(shù)是1還是0)。
=IF(MOD(G2,2)=1,“男”,“女”):IF是一個邏輯判斷函數(shù),表示如果余數(shù)是“1”,則顯示為“男”,否則顯示為“女”。
(六)計算年齡
在J2單元格中輸入“=2006-D2”
表示用2006年減去出生年份就可得出實際年齡了。
經(jīng)過以上幾步的設置之后,便可得如圖所示的結(jié)果。
再用填充柄工具填充數(shù)據(jù)即可。如圖:
四、一步到位法。
上面的方法簡單,容易理解,適合初學者學習使用,但這種方法在實際操作中會產(chǎn)生幾列不需要的數(shù)據(jù)(如本例中的年、月、日、性別位的值等列)。領會了思路之后完全可以一步到位將出生日期、性別和年齡算出來,而不需要用其它單元格轉(zhuǎn)換。可以首先用上面的方法把公式設置好,然后再用替換法直接把中轉(zhuǎn)的單元格用公式代替就可以了。只是在替換的時候要小心仔細,不得馬虎。
按要求輸入的格式如圖:
分別在C2、D2、E2單元格中輸入對應公式。
在C2單元格中輸入公式
=IF(MOD(IF(LEN(F2)=18,MID(F2,17,1),MID(F2,15,1)),2)=1,“男”,“女”)
實際是將原公式“=IF(MOD(G2,2)=1,“男”,“女”)”中的G2直接用IF(LEN(F2)=18,MID(F2,17,1),MID(F2,15,1))替換。
同理在D2單元格中輸入公式
=2006-IF(LEN(F2)=18,MID(F2,7,4),CONCATENATE(“19”,MID(F2,7,2)))
――直接用公式替換原D
2在E2單元格中輸入公式
=CONCATENATE(IF(LEN(F2)=18,MID(F2,7,4),CONCATENATE(“19”,MID(F2,7,2))),“-”,IF(LEN(F2)=18,MID(F2,11,2),MID(F2,9,2)),“-”,IF(LEN(F2)=18,MID(F2,13,2),MID(F2,11,2)))
――直接用公式分別替換原D2、E2、F
2得到如下圖所示的結(jié)果:
最后用填充柄填充數(shù)據(jù)即可。如圖。
五、總結(jié)
Excel中的公式編輯功能非常強大,熟練掌握公式,巧妙運用公式往往能
使工作效率大為提高。
==作者地址:貴州省余慶縣余慶中學電教中心楊松 564400== ==聯(lián)系方式:QQ:23194864 TEL:***== ==郵箱:ysonion@163.com==