Java实现身份证号码验证源码示例分享
整理文档,搜刮出一个Java实现身份证号码验证源码示例代码,稍微整理精简一下做下分享。
packagexxx; /** *Createdbywdjon2017/6/21. */ importjava.text.ParseException; importjava.text.SimpleDateFormat; importjava.util.Calendar; importjava.util.Date; importjava.util.Random; /** *身份证验证的工具(支持15位或18位省份证) *身份证号码结构: **根据〖中华人民共和国国家标准GB11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。 *排列顺序从左至右依次为:6位数字地址码,8位数字出生日期码,3位数字顺序码和1位数字校验码。 *
*地址码(前6位):表示对象常住户口所在县(市、镇、区)的行政区划代码,按GB/T2260的规定执行。 *
*出生日期码,(第7位-14位):表示编码对象出生年、月、日,按GB按GB/T7408的规定执行,年、月、日代码之间不用分隔符。 *
*顺序码(第15位至17位):表示在同一地址码所标示的区域范围内,对同年、同月、同日出生的人编订的顺序号,顺序码的奇数分配给男性,偶数分配给女性。 *
*校验码(第18位数): *
*十七位数字本体码加权求和公式s=sum(Ai*Wi),i=0..16,先对前17位数字的权求和; *Ai:表示第i位置上的身份证号码数字值.Wi:表示第i位置上的加权因子.Wi:7910584216379105842; *计算模Y=mod(S,11) *通过模得到对应的模Y:012345678910校验码:10X98765432 *
*计算步骤: *1.将前17位数分别乘以不同的系数。从第1位到第17位的系数分别为:7910584216379105842 *2.将这17位数字和系数相乘的结果相加。 *3.用加出来和除以11,看余数是多少 *4.余数只可能有012345678910这11个数字,分别对应的最后一位身份证的号码为:10X9876543 *
*我的Java学习交流QQ群:589809992我们一起学Java! */ publicclassIDCardUtil { /** *
*省、直辖市代码表: *11:北京12:天津13:河北14:山西15:内蒙古 *21:辽宁22:吉林23:黑龙江31:上海32:江苏 *33:浙江34:安徽35:福建36:江西37:山东 *41:河南42:湖北43:湖南44:广东45:广西46:海南 *50:重庆51:四川52:贵州53:云南54:西藏 *61:陕西62:甘肃63:青海64:宁夏65:新疆 *71:台湾 *81:香港82:澳门 *91:国外 **/ finalstaticStringCITY_CODE[]={"11","12","13","14","15","21","22","23","31","32","33","34","35","36","37","41","42","43","44","45","46","50","51","52","53","54","61","62","63","64","65","71","81","82","91"}; /** *效验码 */ finalstaticchar[]PARITYBIT={'1','0','X','9','8','7','6','5','4','3','2'}; /** *加权因子 *Math.pow(2,i-1)%11 */ finalstaticint[]POWER={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; /** *身份证验证 * *@paramid号码内容 *@return是否有效 */ publicfinalstaticbooleanisValid(Stringid) { if(id==null) returnfalse; intlen=id.length(); if(len!=15&&len!=18) returnfalse; //校验区位码 if(!validCityCode(id.substring(0,2))) returnfalse; //校验生日 if(!validDate(id)) returnfalse; if(len==15) returntrue; //校验位数 returnvalidParityBit(id); } privatestaticbooleanvalidParityBit(Stringid) { char[]cs=id.toUpperCase().toCharArray(); intpower=0; for(inti=0;i
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。