中国目前已经超过十三亿人,一个巨大的数字,在如此庞大的人群下,政府是如何有序管理的呢?众所周知,每一个人都有一个惟一标识的身份证号,你是否想过会不会有一我的和你有相同的身份证号呢?思考一下是如何作到不重复的呢?javascript
先来看看身份证号内包含了哪些元素。java
1.按地域划分。每一个人出生都有一个出生地,某个省市,某个区县,总会有一个地点,一块空间,具体到身份证号里,前几位所表明的正是每一个人所在的空间。2.按时间划分。每一个人都有生日,生日表明着什么?如何把时间看作一条长河,那么你的生日就是上岸的那一刻岸的位置,可能这个位置这一刻有不少人上岸,但对于你我的只有一个位置,毋庸置疑。在身份证号里中间几位年月日就是这个时间点的体现。3.有序数字。就如你去吃饭等座,你会先领取一个号,从1到100,依次有序的加一,你所领取的这个号,在你吃饭以前确定是惟一的,身份证号后几位便可与此类比。服务器
我曾经思考过若是中国要出现一个和我有同样的身份证号到底有多大的可能,算了一下后几乎是不可能的。由于每一个人的身份证号前几位由于本身的地域不一样而各不相同,中间几位生日不一样也不相同,那若是要两我的身份证号要相同须要具有什么样的条件呢?函数
在身份证号中,在前六位中第一到第二位肯定省级市,第三至第四肯定地级市,第五至第六肯定县级市。ui
对于中间八位的规则:用户的出生年月日,如你是1994年1月22日出生的,中间八位为19940122。spa
第十五至十六位为0-9之间的顺序码,00-99之间的数字。code
第十七位表明性别,奇数为男,偶数为女。orm
第十八位为0-10(10用罗马数字X代替)的校验码,并且这里的校验码并不是随机产生,而是由前十七位来决定的,他的计算公式以下:cdn
身份证号里校验码的意义blog
校验码的存在就是检查当前身份证号是否正确,下面是一个检查身份证号的正确性的函数,有兴趣的试试本身的身份证号。
// 左移 a << b 将 a 的二进制形式向左移 b (< 32) 比特位,右边用0填充。
function checkId(id) {
if (typeof id === 'number') return '请输入字符串类型的身份证号';
if(id.length !== 18) return '请输入正确的身份证号';
let sum = 0;
for(let i=0; i<17; i++) {
sum += ((1 << (17 - i)) % 11) * id[i];
}
const n = (12 - (sum % 11)) % 11;
return n === Number(id[17]) || id[17] === 'X';
}复制代码
若是要两我的身份证号相同,首先要保证两我的在同一个地区保证身份证号前六位相同,接下来须要有相同的生日,保证中间八位相同 ,还剩下最后四位,而最后一位校验码的出现是取决于前17位的,因此只有第十五到十七位三个数字是可变化的,那能承载多少人呢?
第十五位和十六位为随机数,都可出现10中可能,第十七位因为性别奇偶之分,只有5中可能,因此可得出下面的算式。
男性:10 * 10 * 5 = 550
女性:10 * 10 * 5 = 550
我是男性,从上面能够看出来,若是在我所出生的区(身份证前六位精确到区县)而且在我出生的那一天有501个男孩出生,若是保证身份证位数恒定18位不增长且只容许数字状况下,确定有两我的要撞身份证号,因此与我撞身份证号的可能性即为五百分之一。
我查了一些资料,中国2018年整年出生人口1523万人,2017年出生人口约为1723万,2016年约为1786万,这里就当作每一年出生人口为1700万,中国一共有超过2800多个县区,那咱们来算一算大概一个区县天天平均有多少人出生呢?
17000000/365/2800 = 16.63
平均天天每一个区县有17个新生儿,有一些人口密集的地方超平均数10倍或者20倍,也可看出来也离500个差距甚远,因此可得出结论基本没有可能两我的身份证号会相同,若是人口真到很是庞大的时候 ,身份证号也会相应增长位数或者引入英文字母来规避号码相同的问题。
这里从上面身份证号关于重复的计算能够看出,先有了户籍管理部门来制定好一些规则,而后地方的实施者(派出所)再按照规则去生成每一个人的身份证号,在这里抛出了最关键的一个点,中心化的户籍部门。
在计算机世界里,咱们都知道每一个能访问到的服务器都有一个惟一标识IP地址,你能经过IP地址准确找到你的服务器,是怎么实现的呢?其实与身份证号生成流程是一致的,都是要有一个中心化的机构去作分发地址这件事,这个计算机世界里这个中心化机构就是因特网信息中心。
其实生活中确实存在着身份证号相同的问题,在互联网还不是很是普及的时候,各地的派出所没有联网条件,也没办法查该身份证号是否存在,都是靠人来记录的,因此会致使极少一部分人员出现身份证号重复的问题。
这也说明中心机构的可靠性是保证身份证号惟一性的重要缘由。
最后思考一下,若是没有中心化机构了,咱们又该怎么作相似身份证号的惟一标识呢?请看下一篇,无中心化机构,计算机世界的惟一标识是如何生成之UUID?
如上内容均为本身总结,不免会有错误或者认识误差,若有问题,但愿你们留言指正,以避免误人,如有什么问题请留言,会尽力回答之。若是对你有帮助不要忘了分享给你的朋友或者点击右下方的“在看”哦!也能够关注做者,查看历史文章而且关注最新动态,期待你的关注哦!