首页
社区
课程
招聘
[原创] 18年前的小玩意,身份证号生成
发表于: 2022-4-28 19:36 6863

[原创] 18年前的小玩意,身份证号生成

2022-4-28 19:36
6863

看起来是不是很神奇?

其实核心奥义就在身份证前几位和最后一位。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 2
支持
分享
最新回复 (3)
雪    币: 4822
活跃值: (3822)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
2
def checksum ( s ) :
    return str( ( int( '-' + s + '0', 13 ) + 1 ) % 11 ).replace( '10', 'X' )

假设18位身份证号是"430101196001011318",这是我杜撰的一个身份证号,勿对号入
座。那么,上述算法实际是将字符串"-430101196001011310"(尾数用0替换)视为13进
制整数,加1,再模11得到校验码。为了用单个字符,余数是10时用X代替。整个算法
简单直白。

>>> checksum('43010119600101131')
'8'

换句话说,校验18位身份证号时,进行如下运算,结果应该恒为1。

>>> int( '430101196001011318', 13 ) % 11
1

当然,由于尾号有可能是X,无法如此简写,但数学原理如此。
2022-4-29 08:46
1
雪    币: 1392
活跃值: (5172)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
3
scz def checksum ( s ) : return str( ( int( '-' + s + '0', 13 ) + 1 ) % 11 ).replace( '10', 'X' ) ...
活捉大佬。
2022-4-29 08:53
0
雪    币: 1810
活跃值: (4020)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
学习
2022-4-29 10:26
0
游客
登录 | 注册 方可回帖
返回
//