身份证号码校验实例

合集下载

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函数判断。

身份证号码验证模板

身份证号码验证模板

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

  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、然后向下填充,得到其他身份证号码的检验结果。

相关文档
最新文档