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

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

2022-4-28 19:36
5760

看起来是不是很神奇?

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


就不一一讲原理了,想看懂原理自己看代码。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
点赞2
打赏
分享
最新回复 (3)
雪    币: 4069
活跃值: (3047)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
scz 5 2022-4-29 08:46
2
1
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,无法如此简写,但数学原理如此。
雪    币: 1414
活跃值: (4168)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
IamHuskar 4 2022-4-29 08:53
3
0
scz def checksum ( s ) : return str( ( int( '-' + s + '0', 13 ) + 1 ) % 11 ).replace( '10', 'X' ) ...
活捉大佬。
雪    币: 1506
活跃值: (3275)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
小希希 2022-4-29 10:26
4
0
学习
游客
登录 | 注册 方可回帖
返回