身份证号生成,校验码计算

二代身份证号有18位,组成是: 6位地区码+8位出生年月日+3位顺序码+1位校验码

其中,校验码计算如下图,本范例按照红色计算方向走

第一步骤就是映射权重;第二步骤是求积;第三步骤相加求余;最后一个步骤就是查找码表得出最后1位字符

红色方向数字更小,计算更快。

import randomimport time
 
# 地区区域码,此范例只列出3位areas = (‘610622‘, ‘410901‘, ‘321281‘, ‘350581‘)# 身份证前17位权重w17 = (7, 9, 10, 5, 8,       4, 2, 1, 6, 3,       7, 9, 10, 5, 8,       4, 2)# 校验位字典crc_dict = {0: ‘1‘, 1: ‘0‘, 2: ‘X‘, 3: ‘9‘, 4: ‘8‘, 5: ‘7‘, 6: ‘6‘, 7: ‘5‘, 8: ‘4‘, 9: ‘3‘, 10: ‘2‘}

# 生成身份证号码def create_zjhm():    while True:        # 6位数字区域        zjhm = random.choice(areas)        # 8位数字出生年月         t_start = time.mktime((1970, 1, 1, 9, 0, 0, 0, 0, 0))        t_end = time.mktime((1995, 1, 1, 9, 0, 0, 0, 0, 0))        random.randrange(start=t_start, stop=t_end)        zjhm += time.strftime(‘%Y%m%d‘, time.gmtime(random.randrange(t_start, stop=t_end)))        # 3位数字顺序        zjhm += ‘%03d‘ % random.randrange(start=0, stop=999)

# 1位校验位, 根据前面17位号码,计算最后一个校验位,也可用于身份证校验        # 乘以权重之后求和,最后除以11求余        crc = sum(map(lambda z: z[0]*z[1], zip(w17, [int(i) for i in zjhm]))) % 11        # 根据余数映射字符        crc = crc_dict.get(crc)        if not crc:            time.sleep(1)            continue

zjhm += crc        if not zjhm or len(zjhm) != 18:            time.sleep(1)            continue

return zjhm

if __name__ == ‘__main__‘:    print(create_zjhm())
尝试计算结果如下,每次身份证号码随机

610622198009132706
410901198206105966
61062219800922634X

Process finished with exit code 0

 
时间: 2024-12-29 11:40:31

身份证号生成,校验码计算的相关文章

身份证号生成

private void GenPinCode() { string[] _crabodistrict=new string[]{"350201","350202","350203","350204","350205","350206","350211","350205","350213"}; Random rnd = new

解决PHP生成校验码时“图像因其本身有错无法显示”的错误

今天使用http://crazymud.iteye.com/blog/452293给出的代码进行PHP生成校验码功能的实现,发现firefox一直提示“图像.......因其本身有错无法显示”的问题,作者也提示了说“如果浏览器显示“图像XXX因其本身有错无法显示”,可尽量去掉文中空格”,但把代码中所有空格都去掉了还是不能显示检验图片.于是深度google,大部分的解决方案也是将“<?”这句代码前的空格回车一切都删掉以防止有html输出,但这根本解决不了我的问题,后来看到有人在Header("

身份证号正则校验(js校验+JAVA校验)

js校验身份证号[15位和18位] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 8

GB/T 17710-1999 PHP生成校验码

校验码算法描述如下:详细:http://wenku.baidu.com/link?url=CDvNJ1sLYOPzbbxjEy5R-oME95RlfTCUU5-I5M0bqUt0I32b0Xd0EKmI-HiFQHhY8OcB6ERTml7pUwXFseLl8GGvkuc7w0V2sFDxi2H0XGC 本例子以16位编号为例子,用PHP予以实现,代码如下: $m = ''; $str = '440400131008309'; $str.= 'a'; /* 测试用例,最后一位为校验码 44040

省市县结合身份证号6位码的三级联动

工作之中经常遇到省市县的三级联动,也是十分常见的一个功能,自己写了一个结合身份证号码前6位的数字,前两位数字代表省份,中间两位数字代表市,最后两位数字代表县区,当用户在个人中心更改地址时,可以与后端通过6位数字码对地址进行更改,避免在传输汉字时的乱码现象,代码整理如下... <!DOCTYPE HTML > <html> <head> <title> New Document </title> <meta name="Genera

身份证最后一位按照ISO7064:1983.MOD11-2校验码

居民身份证号码,根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码.即8位身份证号码的最后一位是数字校验码. 校验码(身份证最后一位)是根据前面十七位数字码,按照ISO7064:1983.MOD11-2校验码计算出来的检验码. 计算方法: 1.将前面的身份证号码17位数分别乘以不同的系数.从第一位到第十七位的

CRC校验码原理、实例、手动计算

CRC16实现代码 思路:取一个字符(8bit),逐位检查该字符,如果为1,crc^crc_mul;同时,如果原本crc最高位是1,那么crc^crc_mul后左移1位,否则只是左移一位.计算完一个字符后,装入下一个字符. #include<stdio.h> #define crc_mul 0x1021 //生成多项式 unsigned int cal_crc(unsigned char *ptr, unsigned char len) { unsigned char i; unsigned

身份证号

身份证号码共18位:AAAAAABBBBBBCCCD1.号码的结构公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. 2.地址码(前六位数) 表示编码对象常住户口所在县(市.旗.区)的行政区划代码,按GB/T2260的规定执行. 3.出生日期码(第七位至十四位)表示编码对象出生的年.月.日,按GB/T7408的规定执行,年.月.日代码之间不用分隔符. 4.顺序码(第十五位至十七位)表示在同一地

关于身份证号的那些事

居民身份证号码,根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. 一.身份证号码的组成 1.地址码(身份证号码前六位) 表示编码对象常住户口所在县(市.镇.区)的行政区划代码.1-2位省.自治区.直辖市代码: 3-4位地级市.盟.自治州代码: 5-6位县.县级市.区代码. 关于 行政区划代码 具体的对应关