身份证号码校验实例
- 格式:docx
- 大小:14.55 KB
- 文档页数:4
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实现⾝份证校验(包括校验码地区时间)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;本⽂作者本⽂作者: 本⽂链接:关于博主:评论和私信会在第⼀时间回复。
⾝份证校验码计算公式及实例计算校验码是识别⼀个⾝份证号码是否真实存在的重要的依据。
那我们要如何通过校验码来判断⼀个⾝份证号码是否真实的呢?校验码如何判断⾝份证号码真伪呢?我们来看看具体计划过程。
第⼀步:将⾝份证号码的第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************ 这个⾝份证是否是有效⾝份证号码呢?请看校验码分析。
考据公式一=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函数判断。
姓名缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码缺号码。
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,"");}。
校验方法:在蓝色格中输入身份证号,黄色格中即自动计算出校验码。
校验码的计算方法(摘自百度百科):
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校验的简单实例⼀、⾝份证号码的结构和表⽰形式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,点击菜单的“工具→宏→录制新宏”,弹出录制新宏对话框。
⾝份证的测试⽤例⾝份证号:六位数字地址码+⼋位数字出⽣⽇期码+三位数字顺序码+⼀位数字校验码地址码:表⽰编码对象常住户⼝所在县(市、镇、区)的⾏政区划代码出⽣⽇期码:⼋位年⽉⽇格式。
前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)、全⾓字符、空格为空全部为空格。
身份证号码校验实例
身份证号码是按照一定规律编制的,是个人身份的有效证明,每个人只有一个号码,且不会重复,因而被各单位各部门广泛应用在相关名册中。
在大量的身份证号码录入过程中,由于抄写或录入等原因,可能会弄错了某位数字,如果录错了任何一位数字,计算出来的校验码就不一样。
根据这一特点,本函数可以对已录入的大批量身份证号码进行校验,如果校验未通过,则说明你录入的号码中必定是某位数字错了,应及时更正,以保证身份证号码正确有效,如果录入的是第一代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、然后向下填充,得到其他身份证号码的检验结果。