二代身份證驗(yàn)證示例
(一)18身份證號(hào)碼的結(jié)構(gòu)
公民身份號(hào)碼是特征組合碼,由十七位數(shù)字本體碼和一位校驗(yàn)碼組成。
排列順序從左至右依次為:六位數(shù)字地址碼,八位數(shù)字出生日期碼,三位數(shù)字順序碼和一位校驗(yàn)碼。
1、地址碼
表示編碼對(duì)象常住戶口所在縣(市、旗、區(qū))的行政區(qū)域劃分代碼,按GB/T2260的規(guī)定執(zhí)行。
2、出生日期碼
表示編碼對(duì)象出生的年、月、日,按GB/T7408的規(guī)定執(zhí)行,年、月、日代碼之間不用分隔符。
3、順序碼
表示在同一地址碼所標(biāo)識(shí)的區(qū)域范圍內(nèi),對(duì)同年、同月、同日出生的人編定的順序號(hào),順序碼的奇數(shù)分配給男性,偶數(shù)分配給女性。
4、校驗(yàn)碼計(jì)算步驟
(1)十七位數(shù)字本體碼加權(quán)求和公式
S = Sum(Ai * Wi), i = 0, ... , 16 ,先對(duì)前17位數(shù)字的權(quán)求和
Ai:表示第i位置上的身份證號(hào)碼數(shù)字值(0~9)
Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (表示第i位置上的加權(quán)因子)
(2)計(jì)算模
Y = mod(S, 11)
(3)根據(jù)模,查找得到對(duì)應(yīng)的校驗(yàn)碼
Y: 0 1 2 3 4 5 6 7 8 9 10
校驗(yàn)碼: 1 0 X 9 8 7 6 5 4 3 2
(二)根據(jù)17位數(shù)字本體碼獲取最后一位校驗(yàn)碼程序?qū)嵗?/P>
public class Id18 {
int[] weight={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; //十七位數(shù)字本體碼權(quán)重
char[] validate={ '1','0','X','9','8','7','6','5','4','3','2'}; //mod11,對(duì)應(yīng)校驗(yàn)碼字符值
public char getValidateCode(String id17){
int sum=0;
int mode=0;
for(int i=0;i<id17.length();i++){
sum=sum+Integer.parseInt(String.valueOf(id17.charAt(i)))*weight[i];
}
mode=sum%11;
return validate[mode];
}
public static void main(String[] args){
Id18 test=new Id18();
System.out.println("該身份證驗(yàn)證碼:"+test.getValidateCode("14230219700101101")); //該身份證校驗(yàn)碼:3
}
}
(三)說明
1.程序可以根據(jù)已有的17位數(shù)字本體碼,獲取對(duì)應(yīng)的驗(yàn)證碼。
2.該程序可以剔除驗(yàn)證碼不正確的身份證號(hào)碼。
3.15位的身份證出生年份采用年份后2位,沒有最后1位校驗(yàn)碼。
4.完整的身份證18位,最后一位校驗(yàn)位可能是非數(shù)字。我們的一個(gè)項(xiàng)目,數(shù)據(jù)庫保存前17位數(shù)字,這樣對(duì)應(yīng)一些SQL語句(比如inner join)有加速作用的?。?!
相關(guān)文章
Java中List.of()和Arrays.asList()的區(qū)別及原因分析
這篇文章主要介紹了Java中List.of()和Arrays.asList()的區(qū)別及原因分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Java Socket實(shí)現(xiàn)傳輸壓縮對(duì)象的方法示例
這篇文章主要介紹了Java Socket實(shí)現(xiàn)傳輸壓縮對(duì)象的方法,結(jié)合具體實(shí)例形式分析了java socket針對(duì)數(shù)據(jù)的壓縮、傳輸、接收、解壓縮等操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-06-06
springcloud如何使用Feign后臺(tái)內(nèi)部傳遞MultipartFile
這篇文章主要介紹了springcloud如何使用Feign后臺(tái)內(nèi)部傳遞MultipartFile,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
@RequestMapping對(duì)不同參數(shù)的接收方式示例詳解
Spring?MVC框架中,@RequestMapping注解用于映射URL到控制器方法,不同的參數(shù)類型如簡單參數(shù)、實(shí)體參數(shù)、數(shù)組參數(shù)、集合參數(shù)、日期參數(shù)和JSON參數(shù),本文給大家介紹@RequestMapping對(duì)不同參數(shù)的接收方式,感興趣的朋友一起看看吧2024-10-10
SpringBoot中Shiro緩存使用Redis、Ehcache的方法
這篇文章主要介紹了SpringBoot中Shiro緩存使用Redis、Ehcache的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
基于SpringBoot實(shí)現(xiàn)用戶身份驗(yàn)證工具
這篇文章主要介紹了基于SpringBoot實(shí)現(xiàn)的用戶身份驗(yàn)證工具,非常不錯(cuò),具有參考借鑒價(jià)值 ,需要的朋友可以參考下2018-04-04

