身份证号码校验实例

合集下载

Python随机生成身份证号码及校验功能

Python随机生成身份证号码及校验功能

Python随机⽣成⾝份证号码及校验功能⾝份组成⽅式中华⼈民共和国国家标准GB 11643-1999《公民⾝份号码》中规定:公民⾝份号码是特征组合码,由⼗七位数字本体码和⼀位校验码组成。

18位数字组合的⽅式是:1 1 0 1 0 2Y Y Y Y M M D D8 88X区域码(6位)出⽣⽇期码(8位)顺序码(2位)性别码(1位)校验码(1位)区域码(6位) 出⽣⽇期码(8位) 顺序码(2位) 性别码(1位) 校验码(1位)•区域码指的是公民常住户⼝所在县(市、镇、区)的⾏政区划代码,如110102是北京市-西城区。

但港澳台地区居民的⾝份号码只精确到省级。

•出⽣⽇期码表⽰公民出⽣的公历年(4位)、⽉(2位)、⽇(2位)。

•顺序码表⽰在同⼀区域码所标识的区域范围内,对同年、同⽉、同⽇出⽣的⼈编定的顺序号。

•性别码奇数表⽰男性,偶数表⽰⼥性。

•最后⼀位是校验码,这⾥采⽤的是ISO 7064:1983,MOD 11-2校验码系统。

校验码为⼀位数,但如果最后采⽤校验码系统计算的校验码是“10”,碍于⾝份证号码为18位的规定,则以“X”代替校验码“10”。

校验码计算⽅法•1. 将⾝份证号码从右⾄左标记为a_1 , a_2 , \cdots , a_{18},a_1即为校验码;•2. 计算权重系数 W_i=2^{i-1}\ \bmod \ {11}所以:i181716151413121110987654321Wi79105842163791058421•3. 计算S = \sum_{i=2}^{18} a_i \cdot W_i•4. a_1=(12-( S \ \bmod 11)) \bmod 11使⽤Python获取⾝份证校验码:def get_check_digit(id_number):"""通过⾝份证号获取校验码"""check_sum = 0for i in range(0, 17):check_sum += ((1 << (17 - i)) % 11) * int(id_number[i])check_digit = (12 - (check_sum % 11)) % 11return check_digit if check_digit < 10 else 'X'随机⽣成⾝份证由上⾯的组合⽅式我们可以得出以下代码:@classmethoddef generate_id(cls, sex=0):"""随机⽣成⾝份证号,sex = 0表⽰⼥性,sex = 1表⽰男性"""# 随机⽣成⼀个区域码(6位数)area_info = random.randint(0, len(addr))id_number = str(addr[area_info][0])# 限定出⽣⽇期范围(8位数)start, end = "1960-01-01", "2000-12-30"days = (datetime.datetime.strptime(end, "%Y-%m-%d") - datetime.datetime.strptime(start, "%Y-%m-%d")).days + 1birth_days = datetime.datetime.strftime(datetime.datetime.strptime(start, "%Y-%m-%d") + datetime.timedelta(random.randint(0, days)), "%Y%m%d")id_number += str(birth_days)# 顺序码(2位数)id_number += str(random.randint(10, 99))# 性别码(1位数)id_number += str(random.randrange(sex, 10, step=2))# 校验码(1位数)return id_number + str(cls(id_number).get_check_digit())⼯具类主要功能if __name__ == '__main__':random_sex = random.randint(0, 1) # 随机⽣成男(1)或⼥(0)print IdNumberUtil.generate_id(random_sex) # 随机⽣成⾝份证号print IdNumberUtil('410326************').area_id # 地址编码:410326print IdNumberUtil('410326************').get_area_name() # 地址:汝阳县print IdNumberUtil('410326************').get_birthday() # ⽣⽇:1995-7-10print IdNumberUtil('410326************').get_age() # 年龄:23(岁)print IdNumberUtil('410326************').get_sex() # 性别:1(男)print IdNumberUtil('410326************').get_check_digit() # 校验码:7print IdNumberUtil.verify_id('410326************') # 检验⾝份证是否正确:False总结以上所述是⼩编给⼤家介绍的Python随机⽣成⾝份证号码及校验功能,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。

Java实现身份证校验(包括校验码地区时间)

Java实现身份证校验(包括校验码地区时间)

Java实现⾝份证校验(包括校验码地区时间)public class IdCardUtils {//⾝份证前1位每位加权因⼦private static int[] power = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};//⾝份证第18位校检码private static String[] refNumber ={"1", "0", "X", "9", "8", "7", "6", "5", "4", "3"};//省(直辖市)代码表private static String provinceCode[] = { "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" };public static boolean checkIdCard(String idCard) {return checkCardIdLastNum(idCard) && (isValidDate(idCard.substring(6, 14))&& (checkProvinceId(idCard.substring(0, 2)) && isCardId(idCard)));}public static boolean isCardId(String cardid){return Pattern.matches("^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([\\d|x|X]{1})$", cardid);}/*** 检查⾝份证的省份信息是否正确(使⽤与18/15位⾝份证)* @param provinceId* @return*/public static boolean checkProvinceId(String provinceId){for (String id : provinceCode) {if (id.equals(provinceId)) {return true;}}return false;}/*** 校验⾝份证第18位是否正确(只适合18位⾝份证)* @param cardId* @return*/public static boolean checkCardIdLastNum(String cardId){if(cardId.length() != 18){return false;}char[] tmp = cardId.toCharArray();int[] cardidArray = new int[tmp.length-1];int i=0;for(i=0;i<tmp.length-1;i++){cardidArray[i] = Integer.parseInt(tmp[i]+"");}String checkCode = sumPower(cardidArray);String lastNum = tmp[tmp.length-1] + "";if(lastNum.equals("x")){lastNum = lastNum.toUpperCase();}if(!checkCode.equals(lastNum)){return false;}return true;}/*** 计算⾝份证的第⼗⼋位校验码* @param cardIdArray* @return*/public static String sumPower(int[] cardIdArray){int result = 0;本⽂作者本⽂作者: 本⽂链接:关于博主:评论和私信会在第⼀时间回复。

身份证EXECL校验模板 含地址校验码

身份证EXECL校验模板 含地址校验码

510727198409138609 500225198409138607 430501198502213779
0
0
0
0
3
9
1
510727 500225500200500000 430501430500430000
1 1265/3016/3021 2773/1031阳市
0009000000000510727500225198409138607500225500200500000126530163021重庆市大足县430501198502213779430501430500430000277310311032湖南省邵阳市00号码错误110000北京市110100110101东城区110102西城区110103崇文区110104宣武区110105朝阳区110106丰台区110107石景山区110108海淀区110109门头沟区110111房山区110112通州区110113顺义区110114昌平区110115大兴区110200110226平谷县110227怀柔县110228密云县110229延庆县120000天津市120100120101和平区120102河东区120103河西区120104南开区120105河北区120106红桥区120107塘沽区120108汉沽区120109大港区120110东丽区120111西青区120112津南区120113北辰区120114武清区120115宝坻区120200120221宁河县120223静海县120225蓟县130000河北省130100石家庄市130101130102长安区130103桥东区130104桥西区130105新华区130421邯郸县130423临漳县130424成安县130425大名县130426涉县130427磁县130428肥乡县130429永年县130430邱县130431鸡泽县130432广平县130433馆陶县130434魏县130435曲周县130481武安市130500邢台市130501130502桥东区130503桥西区130521邢台县130522临城县130523内丘县130524柏乡县130525隆尧县130526任县130527南和县130528宁晋县130529巨鹿县130530新河县130531广宗县130532平乡县130533威县130534清河县130535临西县130581南宫市130582沙河市130600保定市130601130602新市区130603北市区130604南市区130621满城县130622清苑县130623涞水县130624阜平县130625徐水县130626定兴县130627唐县130628高阳县130629容城县130630涞源县130924海兴县130925盐山

身份证校验码计算公式及实例计算

身份证校验码计算公式及实例计算

⾝份证校验码计算公式及实例计算校验码是识别⼀个⾝份证号码是否真实存在的重要的依据。

那我们要如何通过校验码来判断⼀个⾝份证号码是否真实的呢?校验码如何判断⾝份证号码真伪呢?我们来看看具体计划过程。

第⼀步:将⾝份证号码的第1位数字与7相乘;将⾝份证号码的第2位数字与9相乘;将⾝份证号码的第3位数字与10相乘;将⾝份证号码的第4位数字与5相乘;将⾝份证号码的第5位数字与8相乘;将⾝份证号码的第6位数字与4相乘;将⾝份证号码的第7位数字与2相乘;将⾝份证号码的第8位数字与1相乘;将⾝份证号码的第9位数字与6相乘;将⾝份证号码的第10位数字与3相乘;将⾝份证号码的第11位数字与7相乘;将⾝份证号码的第12位数字与9相乘;将⾝份证号码的第13位数字与10相乘;将⾝份证号码的第14位数字与5相乘;将⾝份证号码的第15位数字与8相乘;将⾝份证号码的第16位数字与4相乘;将⾝份证号码的第17位数字与2相乘。

第⼆步:将第⼀步⾝份证号码1~17位相乘的结果求和,全部加起来。

第三步:⽤第⼆步计算出来的结果除以11,这样就会出现余数为0,余数为1,余数为2,余数为3,余数为4,余数为5,余数为6,余数为7,余数为8,余数为9,余数为10共11种可能性。

第四步:如果余数为0,那对应的最后⼀位⾝份证的号码为1;如果余数为1,那对应的最后⼀位⾝份证的号码为0;如果余数为2,那对应的最后⼀位⾝份证的号码为X;如果余数为3,那对应的最后⼀位⾝份证的号码为9;如果余数为4,那对应的最后⼀位⾝份证的号码为8;如果余数为5,那对应的最后⼀位⾝份证的号码为7;如果余数为6,那对应的最后⼀位⾝份证的号码为6;如果余数为7,那对应的最后⼀位⾝份证的号码为5;如果余数为8,那对应的最后⼀位⾝份证的号码为4;如果余数为9,那对应的最后⼀位⾝份证的号码为3;如果余数为10,那对应的最后⼀位⾝份证的号码为2。

⽐如:⾝份证号码 432831************ 这个⾝份证是否是有效⾝份证号码呢?请看校验码分析。

身份证校验算法

身份证校验算法

下面介绍算法:
计算公式令结果为 Y,Y的计算公式为:Y = mod(S, 11)根据下表找出 Y 对应的校验码即为要求身份证号码的校验码C。
例如:假设某女性居民的15位身份证号码是320105820927512,32表示江苏省,01表示南京市,05表示鼓楼区,820927表示1982年9月27日。512表示是该地区同年同月同日的第512人,其中2表示是女性。那么,升级为18位后的号码为32010519820927512C。下面就根据公式来计算C的值。
根据《中华人民共和国国家标准GB 11643-1999》中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。顺序码的奇数分给男性,偶数分给女性。校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
String[] w = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
for (int i=0; i<17; i++) {
int ai = Integer.parseInt(arrIdCard.substring(i,i+1));
具体实现代码如下(JAVA):
public boolean isIdCard(String arrIdCard) {
int sigma = 0;

18位身份证号码校验

18位身份证号码校验

此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对
此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对 此身份证号码位数不对

身份证正确检验及验证公式

身份证正确检验及验证公式

考据公式一=IF(LEN(H20)=18,IF(RIGHT(H20,1)="X",IF(CHOOSE(MOD(SUM(LEFT(RIGHT(H20,18) )*7 LEFT(RIGHT(H20,17))*9 LEFT(RIGHT(H20,16))*10 LEFT(RIGHT(H20,15))*5LEFT(RIGHT(H20,14))*8 LEFT(RIGHT(H20,13))*4 LEFT(RIGHT(H20,12))*2LEFT(RIGHT(H20,11))*1 LEFT(RIGHT(H20,10))*6 LEFT(RIGHT(H20,9))*3LEFT(RIGHT(H20,8))*7 LEFT(RIGHT(H20,7))*9 LEFT(RIGHT(H20,6))*10LEFT(RIGHT(H20,5))*5 LEFT(RIGHT(H20,4))*8 LEFT(RIGHT(H20,3))*4LEFT(RIGHT(H20,2))*2),11)1,1,0,"X",9,8,7,6,5,4,3,2)=LEFT(RIGHT(H20,1))," 正确! "," 出错啦!"),IF(CHOOSE(MOD(SUM(LEFT(RIGHT(H20,18))*7 LEFT(RIGHT(H20,17))*9LEFT(RIGHT(H20,16))*10 LEFT(RIGHT(H20,15))*5 LEFT(RIGHT(H20,14))*8LEFT(RIGHT(H20,13))*4 LEFT(RIGHT(H20,12))*2 LEFT(RIGHT(H20,11))*1LEFT(RIGHT(H20,10))*6 LEFT(RIGHT(H20,9))*3 LEFT(RIGHT(H20,8))*7LEFT(RIGHT(H20,7))*9 LEFT(RIGHT(H20,6))*10 LEFT(RIGHT(H20,5))*5LEFT(RIGHT(H20,4))*8 LEFT(RIGHT(H20,3))*4 LEFT(RIGHT(H20,2))*2),11)1,1,0,"X",9,8,7,6,5,4,3,2)=LEFT(RIGHT(H20,1))*1," 正确! "," 出错啦!")),IF(LEN(H20)=15," 老号,请注意! ",IF(LEN(H20)=0," 缺号码 "," 位数不对! ")))考据公式二=MID("10X98765432",MOD(SUMPRODUCT(MID(H20,ROW(INDIRECT("1:17")),1)*2^(18 -ROW(INDIRECT("1:17")))),11) 1,1)=RIGHT(H20,1)身份证有 15 位和 18 位两种,身份证位数可否正确,我们能够用LEN函数判断。

身份证号码验证模板

身份证号码验证模板

姓名缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码。

第二代居民身份证号码的校验码计算模型、步骤、公式

第二代居民身份证号码的校验码计算模型、步骤、公式

②将公式①的(2n ÷ 11取余) 普 去掉,只留2n 通 公 式 ③将公式①的LookUp函数 换成Mid函数
④将公式②的LookUp函数 换成Mid函数
⑤将公式①变为数组公式, =LEFT(D2,17)&LOOKUP(MOD(SUM(MID(D2,ROW(INDIRECT("1:17")),1)*MOD(2^(18ROW(INDIRECT("1:17"))),11)),11),{0;1;2;3;4;5;6;7;8;9;10},{1;0;"X";9;8;7;6;5;4;3;2}) 按Ctrl+Shift+Enter组合键 数 组 公 式 ⑥将公式②变为数组公式, =LEFT(D2,17)&LOOKUP(MOD(SUM(MID(D2,ROW(INDIRECT("1:17")),1)*2^(18ROW(INDIRECT("1:178;9;10},{1;0;"X";9;8;7;6;5;4;3;2}) 按Ctrl+Shift+Enter组合键 ⑦将公式③变为数组公式, =LEFT(D2,17)&MID("10X98765432",MOD(SUM(MID(D2,ROW(INDIRECT("1:17")),1)*MOD(2^(18ROW(INDIRECT("1:17"))),11)),11)+1,1) 按Ctrl+Shift+Enter组合键 ⑧将公式④变为数组公式, =LEFT(D2,17)&MID("10X98765432",MOD(SUM(MID(D2,ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1) 按Ctrl+Shift+Enter组合键

JS严格校验身份证号-(严格校验每一位身份号码)

JS严格校验身份证号-(严格校验每一位身份号码)

JS严格校验⾝份证号-(严格校验每⼀位⾝份号码)html校验⽰例<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>JS严格校验⾝份证号</title></head><body><div align="center"></br></br></br></br></br></br></br></br><div class="form-inline"><input type="text"class="form-control" style="width: 200px;" id="idCard" placeholder="输⼊⾝份证号"><button class="btn btn-default" onclick="check();">校验</button></div></div><footer class="footer"><div class="container"><p class="text-muted" align="center">Author:<a href="" target="_blank">麦⽥技术博客</a></p></div></footer></body><script type="text/javascript">function check(){var idCard = document.getElementById("idCard").value;var flag =IdCardValidate(idCard);if(flag){alert("正确!");}else{alert("您输⼊的⾝份证号格式不正确 ");}}var Wi =[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1];// 加权因⼦var ValideCode =[1,0,10,9,8,7,6,5,4,3,2];// ⾝份证验证位值.10代表Xfunction IdCardValidate(idCard){idCard =trim(idCard.replace(/ /g,""));//去掉字符串头尾空格if(idCard.length ==15){return isValidityBrithBy15IdCard(idCard);//进⾏15位⾝份证的验证}else if(idCard.length ==18){var a_idCard = idCard.split("");// 得到⾝份证数组if(isValidityBrithBy18IdCard(idCard)&&isTrueValidateCodeBy18IdCard(a_idCard)){//进⾏18位⾝份证的基本验证和第18位的验证return true;}else{return false;}}else{return false;}}/*** 判断⾝份证号码为18位时最后的验证位是否正确* @param a_idCard ⾝份证号码数组* @return*/function isTrueValidateCodeBy18IdCard(a_idCard){function isTrueValidateCodeBy18IdCard(a_idCard){var sum =0;// 声明加权求和变量if(a_idCard[17].toLowerCase()=='x'){a_idCard[17]=10;// 将最后位为x的验证码替换为10⽅便后续操作}for(var i =0; i <17; i++){sum += Wi[i]* a_idCard[i];// 加权求和}valCodePosition = sum %11;// 得到验证码所位置if(a_idCard[17]== ValideCode[valCodePosition]){return true;}else{return false;}}/*** 验证18位数⾝份证号码中的⽣⽇是否是有效⽣⽇* @param idCard 18位书⾝份证字符串* @return*/function isValidityBrithBy18IdCard(idCard18){var year = idCard18.substring(6,10);var month = idCard18.substring(10,12);var day = idCard18.substring(12,14);var temp_date =new Date(year,parseFloat(month)-1,parseFloat(day)); // 这⾥⽤getFullYear()获取年份,避免千年⾍问题if(temp_date.getFullYear()!=parseFloat(year)||temp_date.getMonth()!=parseFloat(month)-1||temp_date.getDate()!=parseFloat(day)){return false;}else{return true;}}/*** 验证15位数⾝份证号码中的⽣⽇是否是有效⽣⽇* @param idCard15 15位书⾝份证字符串* @return*/function isValidityBrithBy15IdCard(idCard15){var year = idCard15.substring(6,8);var month = idCard15.substring(8,10);var day = idCard15.substring(10,12);var temp_date =new Date(year,parseFloat(month)-1,parseFloat(day)); // 对于⽼⾝份证中的你年龄则不需考虑千年⾍问题⽽使⽤getYear()⽅法if(temp_date.getYear()!=parseFloat(year)||temp_date.getMonth()!=parseFloat(month)-1||temp_date.getDate()!=parseFloat(day)){return false;}else{return true;}}//去掉字符串头尾空格function trim(str){return str.replace(/(^\s*)|(\s*$)/g,"");}</script></html>js校验核⼼代码引⼊只需要调⽤这个⽅法即可IdCardValidate(“你要验证的⾝份证”); function check(){var idCard = document.getElementById("idCard").value;var flag =IdCardValidate(idCard);var flag =IdCardValidate(idCard);if(flag){alert("正确!");}else{alert("您输⼊的⾝份证号格式不正确 ");}}var Wi =[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1];// 加权因⼦var ValideCode =[1,0,10,9,8,7,6,5,4,3,2];// ⾝份证验证位值.10代表Xfunction IdCardValidate(idCard){idCard =trim(idCard.replace(/ /g,""));//去掉字符串头尾空格if(idCard.length ==15){return isValidityBrithBy15IdCard(idCard);//进⾏15位⾝份证的验证}else if(idCard.length ==18){var a_idCard = idCard.split("");// 得到⾝份证数组if(isValidityBrithBy18IdCard(idCard)&&isTrueValidateCodeBy18IdCard(a_idCard)){//进⾏18位⾝份证的基本验证和第18位的验证return true;}else{return false;}}else{return false;}}/*** 判断⾝份证号码为18位时最后的验证位是否正确* @param a_idCard ⾝份证号码数组* @return*/function isTrueValidateCodeBy18IdCard(a_idCard){var sum =0;// 声明加权求和变量if(a_idCard[17].toLowerCase()=='x'){a_idCard[17]=10;// 将最后位为x的验证码替换为10⽅便后续操作}for(var i =0; i <17; i++){sum += Wi[i]* a_idCard[i];// 加权求和}valCodePosition = sum %11;// 得到验证码所位置if(a_idCard[17]== ValideCode[valCodePosition]){return true;}else{return false;}}/*** 验证18位数⾝份证号码中的⽣⽇是否是有效⽣⽇* @param idCard 18位书⾝份证字符串* @return*/function isValidityBrithBy18IdCard(idCard18){var year = idCard18.substring(6,10);var month = idCard18.substring(10,12);var day = idCard18.substring(12,14);var temp_date =new Date(year,parseFloat(month)-1,parseFloat(day));// 这⾥⽤getFullYear()获取年份,避免千年⾍问题if(temp_date.getFullYear()!=parseFloat(year)||temp_date.getMonth()!=parseFloat(month)-1||temp_date.getDate()!=parseFloat(day)){return false;}else{return true;}}/*** 验证15位数⾝份证号码中的⽣⽇是否是有效⽣⽇* @param idCard15 15位书⾝份证字符串* @return* @return*/function isValidityBrithBy15IdCard(idCard15){var year = idCard15.substring(6,8);var month = idCard15.substring(8,10);var day = idCard15.substring(10,12);var temp_date =new Date(year,parseFloat(month)-1,parseFloat(day));// 对于⽼⾝份证中的你年龄则不需考虑千年⾍问题⽽使⽤getYear()⽅法if(temp_date.getYear()!=parseFloat(year)||temp_date.getMonth()!=parseFloat(month)-1||temp_date.getDate()!=parseFloat(day)){return false;}else{return true;}}//去掉字符串头尾空格function trim(str){return str.replace(/(^\s*)|(\s*$)/g,"");}。

身份证号第18位校验xls

身份证号第18位校验xls

校验方法:在蓝色格中输入身份证号,黄色格中即自动计算出校验码。

校验码的计算方法(摘自百度百科):
1、将前面的身份证号码17位数分别乘以不同的系数。

从第一位到第十七位的系数分别为:7-9-10-5
2、将这17位数字和系数相乘的结果相加。

3、用加出来和除以11,看余数是多少?
4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。

其分别对应的最后一位身份证的号码
5、通过上面得知如果余数是2,就会在身份证的第18位数字上出现的是 X。

如果余数是10,身份证的最例如:某男性的身份证号码为【530102************】, 我们看看这个身份证是不是合法的身份证。

首先我们得出前17位的乘积和【(5*7)+(3*9)+(0*10)+(1*5)+(0*8)+(2*4)+(1*2)+(9*1)+(2*6)+(0*3)+(也就是说其余数是2。

最后通过对应规则就可以知道余数2对应的检验码是X。

所以,可以判定这是一个正
系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。

应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。

如果余数是10,身份证的最后一位号码就是罗马数字 2。

证是不是合法的身份证。

*2)+(9*1)+(2*6)+(0*3)+(0*7)+(5*9)+(0*10)+(8*5)+(0*8)+(1*4)+(1*2)】是189,然后用189除以11得出的结果是所以,可以判定这是一个正确的身份证号码。

除以11得出的结果是189/11=17----2,。

15位和18位身份证JS校验的简单实例

15位和18位身份证JS校验的简单实例

15位和18位⾝份证JS校验的简单实例⼀、⾝份证号码的结构和表⽰形式1、号码的结构根据〖中华⼈民共和国国家标准GB11643-1999〗中有关公民⾝份号码的规定,公民⾝份号码是特征组合码,由⼗七位数字本体码和⼀位校验码组成。

排列顺序从左⾄右依次为:六位数字地址码,⼋位数字出⽣⽇期码,三位数字顺序码和⼀位数字校验码。

2、地址码表⽰编码对象常住户⼝所在县(市、旗、区)的⾏政区划代码,按GB/T2260的规定执⾏。

3、出⽣⽇期码表⽰编码对象出⽣的年、⽉、⽇,按GB/T7408的规定执⾏,年、⽉、⽇代码之间不⽤分隔符。

4、顺序码表⽰在同⼀地址码所标识的区域范围内,对同年、同⽉、同⽇出⽣的⼈编定的顺序号,顺序码的奇数分配给男性,偶数分配给⼥性。

5、校验码(1)⼗七位数字本体码加权求和公式S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和Ai:表⽰第i位置上的⾝份证号码数字值Wi:表⽰第i位置上的加权因⼦7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2(2)计算模Y = mod(S, 11)(3)通过模得到对应的校验码Y: 0 1 2 3 4 5 6 7 8 9 10校验码: 1 0 X 9 8 7 6 5 4 3 2也就是说,如果得到余数为1则最后的校验位p应该为对应的0。

15位的号码:a ab bc c y y m md d x x s18位的号码:a ab bc c y y y y m md d x x s p⼆、地址码⾝份证前6位为⾏政区划数字代码(简称数字码)说明(参考《GB/T 2260-2007 中华⼈民共和国⾏政区划代码》):该数字码的编制原则和结构分析,它采⽤三层六位层次码结构,按层次分别表⽰我国各省(⾃治区,直辖市,特别⾏政区)、市(地区,⾃治州,盟)、县(⾃治县、县级市、旗、⾃治旗、市辖区、林区、特区)。

(1)第1、2位数字:所在省份编码,表⽰省、⾃治区、直辖市、特别⾏政区。

身份证号码校验实例

身份证号码校验实例

身份证号码校验实例身份证号码是按照一定规律编制的,是个人身份的有效证明,每个人只有一个号码,且不会重复,因而被各单位各部门广泛应用在相关名册中。

在大量的身份证号码录入过程中,由于抄写或录入等原因,可能会弄错了某位数字,如果录错了任何一位数字,计算出来的校验码就不一样。

根据这一特点,本函数可以对已录入的大批量身份证号码进行校验,如果校验未通过,则说明你录入的号码中必定是某位数字错了,应及时更正,以保证身份证号码正确有效,如果录入的是第一代15位身份证号码,本函数将返回18位号码,使身份证号码保持统一的位数。

以下是函数代码(复制代码):Function IDcheck(ID) '身份证号码校验函数Dim s, i As IntegerDim e, z As StringPart1: '----------------------------身份证号码合法性检查---------------------------------------If Not (Len(ID) = 18 Or Len(ID) = 15) Then '位数检验IDcheck = "位数错误"Exit FunctionElseIf Len(ID) = 15 Then ID = Left(ID, 6) & "19" & Right(ID, 9)If IsNumeric(Left(ID, 17)) = False Or InStr(ID, ".") > 0 Then '字符检验IDcheck = "字符错误"Exit FunctionEnd IfOn Error Resume Next '日期检验If DateValue(Mid(ID, 7, 4) & "-" & Mid(ID, 11, 2) & "-" & Mid(ID, 13, 2)) < 1 Or _DateValue(Mid(ID, 7, 4) & "-" & Mid(ID, 11, 2) & "-" & Mid(ID, 13, 2)) > Date ThenIDcheck = "日期错误"Exit FunctionEnd IfEnd IfPart2: '-----------------------------校验码的生成及检查----------------------------------------s = 0For i = 1 To 17s = s + Val(Mid(ID, 18 - i, 1)) * (2 ^ i Mod 11)Nexte = Mid("10X98765432", (s Mod 11) + 1, 1) '生成校验码If Len(ID) = 18 Thenz = UCase(Right(ID, 1))If z = e Then '校验码对比IDcheck = "TRUE"ElseIDcheck = "FALSE" '如果要返回校验码,请把本行语句改为:IDcheck = eEnd IfElseIDcheck = ID & e '15位身份证号码升位End IfEnd Function '编写474589791 2011年6月11日复制代码使用方法:一、建立函数1、打开excel,点击菜单的“工具→宏→录制新宏”,弹出录制新宏对话框。

身份证测试用例

身份证测试用例
请求出错错误代码400请尝试刷新页面重试
身份证测试用例
1、正确数据-输入15位身份证号,例如320311770706001 2、正确数据-输入18位身份证号且只有数字,例如130701199310302288 3、正确数据_输入18位身份证号且最后一位为X,例如52030219891209794X 4、错误数据_输入18位身份证号且最后一位为除X外的字母,例如52030219891209794Y 5、错误数据-输入数字少于15位,例如32031177070600 6、错误数据-输入数字多于15位少于18位,例如3203117707060011 7、错误数据-输入数字少于18位,例如52030219891209794 8、错误数据-输入数字多于18位,例如5203021989120979412 9、错误数据-身份证号中含有字母,例如52030219aaaaddd8912 10、错误数据-输入数据中含有特殊字符,例如520@#¥%&×302198912 11、错误数据-输入为空 12、错误数据-输入为空格
ห้องสมุดไป่ตู้

身份证的测试用例

身份证的测试用例

⾝份证的测试⽤例⾝份证号:六位数字地址码+⼋位数字出⽣⽇期码+三位数字顺序码+⼀位数字校验码地址码:表⽰编码对象常住户⼝所在县(市、镇、区)的⾏政区划代码出⽣⽇期码:⼋位年⽉⽇格式。

前4位表⽰⼀个正确的年份(如1900~2015年,不能超过当前年份);中间2位表⽰01~12⽉,最后2位表⽰01~31⽇;⽇期还要遵循⼤⽉⼩⽉、闰年平年的规则。

顺序码:000~999的纯数字。

其中最后⼀位奇数分给男性,偶数分给⼥性。

数字校验码:0~9数字或X测试⽤例:1、地址码:(1)有效等价类:参考具体⾏政区划得出6位数字,如330183(2)⽆效等价类:不是⾏政区得出的6 位数字2、出⽣⽇期码:(1)有效等价类:随机抽取⼏个正确的⽇期平年、⼤⽉(1、3、5、7、8、10、12)测30号和31号平年、⼩⽉(4、6、9、11)测30号平年、2⽉测28号闰年、2⽉测29号较早年份,如1900年,可以根据需求⽽定较近年份,如20151221,根据需求⽽定01⽉、12⽉、01号、31号的有效⽇期(2)⽆效等价类:平年、⼤⽉测32号平年、⼩⽉测31号平年、2⽉测29号、30、31号闰年、2⽉测30号、31号00⽉、13⽉及以上、00号、32号及以上空⾮8位数字全部为空格3、顺序码:(1)有效等价类:000~999的奇数000~999的偶数(2)⽆效等价类:⾮3位数字(包括空格、空)4、数字校验码:(1)有效等价类:按照⼀定规则计算前17位得出(视需求⽽定)0~9Xx(2)⽆效等价类:⾮1位数字(包括空格、空)⾮X和x的字母5、其他(整体)⽆效等价类:17位数字、19位数字15位合法的⾝份证号14位数字、16位数字号码中含有特殊字符、中⽂、字母(除最后⼀位是X或x)、全⾓字符、空格为空全部为空格。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

身份证号码校验实例
身份证号码是按照一定规律编制的,是个人身份的有效证明,每个人只有一个号码,且不会重复,因而被各单位各部门广泛应用在相关名册中。

在大量的身份证号码录入过程中,由于抄写或录入等原因,可能会弄错了某位数字,如果录错了任何一位数字,计算出来的校验码就不一样。

根据这一特点,本函数可以对已录入的大批量身份证号码进行校验,如果校验未通过,则说明你录入的号码中必定是某位数字错了,应及时更正,以保证身份证号码正确有效,如果录入的是第一代15位身份证号码,本函数将返回18位号码,使身份证号码保持统一的位数。

代码如下:
Function IDcheck(ID) '身份证号码校验函数
Dim s, iAs Integer
Dim e, z As String
Part1: '----------------------------身份证号码合法性检查---------------------------------------
If Not (Len(ID) = 18 Or Len(ID) = 15) Then '位数检验
IDcheck = "位数错误"
Exit Function
Else
If Len(ID) = 15 Then ID = Left(ID, 6) & "19" & Right(ID, 9)
If IsNumeric(Left(ID, 17)) = False Or InStr(ID, ".") > 0 Then '字符检验
IDcheck = "字符错误"
Exit Function
End If
On Error Resume Next '日期检验
If DateValue(Mid(ID, 7, 4) & "-" & Mid(ID, 11, 2) & "-" & Mid(ID, 13, 2)) < 1 Or _
DateValue(Mid(ID, 7, 4) & "-" & Mid(ID, 11, 2) & "-" & Mid(ID, 13, 2)) > Date Then
IDcheck = "日期错误"
Exit Function
End If
End If
Part2: '-----------------------------校验码的生成及检查---------------------------------------- s = 0
For i = 1 To 17
s = s + Val(Mid(ID, 18 - i, 1)) * (2 ^ i Mod 11)
Next
e = Mid("10X98765432", (s Mod 11) + 1, 1) '生成校验码
If Len(ID) = 18 Then
z = UCase(Right(ID, 1))
If z = e Then '校验码对比
IDcheck = "通过"
Else
IDcheck = "校验未通过" '如果要返回校验码,请把本行语句改为:IDcheck = e End If
Else
IDcheck = ID & e '15位身份证号码升位
End If
End Function '编写 474589791 2011年6月11日
使用方法:
一、建立函数
1、打开excel,点击菜单的“工具→宏→录制新宏”,弹出录制新宏对话框。

2、在“保存在”下面选择“个人宏工作簿”,点击确定。

(选择个人宏工作簿有2大好处:①使本函数可应用于当前计算机中所有的excel工作表;②不受宏安全性设置高低的影响。


3、在弹出的录制宏工具中点击“停止录制”按钮,结束宏的录制。

4、点击菜单的“工具→宏→Visual Basic 编辑器”,打开编辑器。

5、在编辑器中可以看到刚才录制的代码“Sub macrol()”,还有录制时间等内容。

选中编辑器中的代码并删除。

注:如果编辑器中没有出现PERSONAL.XLS - 模块1(代码),请在左边“工程资源管理器”中找到PEROSNAL.XLS下面的模块1并双击。

6、把以上代码复制到编辑器中,保存并退出编辑器。

至此,你就可以使用本函数了。

二、函数的使用
1、打开名册,点击身份证号码后面用于存放校验结果的空白单元格,点击插入函数按钮 fx ,弹出插入函数对话框。

2、在“选择类别”中选择“用户定义”类。

3、可以看到“选择函数”下面出现了刚才保存的 PERSONAL.XLS!IDcheck 函数,选中该函数,点击确定按钮,弹出“函数参数”对话框。

4、点击工作表上对应的身份证号码单元格,点击“确定”按钮。

5、然后向下填充,得到其他身份证号码的检验结果。

相关文档
最新文档