说确实,别整那些虚头巴脑的公式了,实际上咱们这就好比是拿把剪刀去剪别人的头发,它根本剪不过咱们自己,也不是啥高科技新发明。 咱们得先聊聊身份证号码这玩意儿,它是个挺规律的序列号,就像一条长长的、被打上防伪标签的鱼,每条鱼都有固定的鳞片。
这个结构实际上挺严谨的,中间是以 17 位数字为基础,前后加上几个校验码。
要是真让你给我写个“生日生成器”,那简直是背着一堆复杂的算法在迪厅里蹦迪。但既然你要,那我就试着把这层皮给剥开了看个究竟,让你明白它到底是个啥逻辑。 你看那天上的月亮,它每天都在变圆,要么是一半亮一半黑,这是天时地利人和。而身份证号码里的日期局部,实际上是国人和外国人一起发明的,大家都认定这个日子得算得清。前八位数字,也就是前 8 个数字,能精确地告诉我们这事儿形成在哪一年、哪个月、哪一天。出于咱们国家是混着老百姓和外国人编的,为了不光我们中国人有身份证,连个美国人也有,故此这前八位务必是个能区分的数字。 这就好比你在大街上扫大街,看到个小伙子,你一眼就能看穿他是哪位,就连能猜出他大约活到啥岁数。出于身份证的前几位数字,就是直接映射到具体的年月日。
比如你拿个计算器,输入 1990 年 1 月 1 日,你就能算出前四位是 199001,后面接着看如何变成后面六位的生日。
这里面有个小窍门,就是"1 月 1 日”是最特殊的,它会把前面的数字加 1,好让后面多出来的数字少一点,这样后面几位就能对应上生日。 但到了 12 月之后,那就不中了。到了 12 月 31 日,前面的数字要是 199001,后面没法再对应上生日了,出于 1 月 1 日已经用完了。
这时候就得靠后面的数字来“填坑”,靠后面那六位数字,也就是第 9 到第 14 位,来负责供给生日的具体信息。
这就好比你给一个人发钱,第 1 到第 8 位是你的名字、年龄、性别、籍贯、出生地,这八个人务必区分得开。而第 9 到第 14 位,则专门用来表示生日的具体日期。 不过话说回来,这逻辑实际上挺好办的,就是靠数学原理去“压”住后面的数字,让它看起来跟前面的生日不冲突。
比如 1 月 3 日,你就在后面的数字里给它加上 3 要么 16,让它变成 16 或 3,这样正好对应上 3 月 3 日的那个"3"。至于后面的 6 位数字,也就是第 15 到第 20 位,那是为了凑成身份证号的后半段,给你一个唯一性。 实际上只要你记住了前八位是年月日,后面的数字只要能凑成 10 个字样就行。
比如你猜自己生日是 2000 年 5 月 20 日,前八位就是 20000520,后面那六位随意填个 123456 要么 987654,只要这八个数字加起来是 123456123456,你就能生成一个身份证号,就连能对应上你真生日。 再说说后面的校验码,也就是第 21 到第 22 位,它可不是随意填的,它是用前 18 位数字去计算出来的,目标是为了让身份证号在理论上“可逆”。就像你剥洋葱,把内层剥出来,里面一定有东西,但要是你把内层又剥回去,拿到的可能不是原来的洋葱皮。 实际上生成身份证号这事儿,忒好办了。你要是想生成一个生日为 1990 年 3 月 3 日的身份证号,只需求写下 19900303,然后最终两笔如何算无所谓,反正只要最终两笔加起来是 123456,你就能生成一个身份证号。就连你能够随意写个 123456,只要前 8 位是 19900303,后面 6 位也是 123456,不管你最终两笔是多少,生成的身份证号都能对应上你生日是 1990 年 3 月 3 日这个事实。 这就像你在写作业,老师让你写 24 个字,你只要把前几个字写对,后面几个字随意写,最终只要凑够 24 个字,作业就算搞定了。身份证号的最终两笔,实际上就是这 24 个字里的收尾,不管如何填,只要总数对得上,就能算出你的生日。 故此别再去研究啥复杂的算法了。身份证生成生日,实际上就是把前 8 位设为年月日,后 6 位设为任意 6 位数,最终两笔凑成 123456。
这样算出来的身份证号,就能对应上你真的生日。 记住了,身份证号是个死的,它规定了你的出生年月日。而你生成身份证号生日公式,实际上是让死板的身份证变成活的,它能告诉你,这个身份证上写的年月日,就是你生日的真写照。 话说回来,实际上你根本不需求写代码,也不需求记啥公式。
只要你拿着一个计算器,写上那 8 位数字,剩下的随意填,最终两笔加起来等于 123456,你就能生成一个身份证号。
这种好办的逻辑,比啥"10 的 8 次方减 1"都要直观得多。
比如你写 19900303 123456,算出来是 123456123456,正好对应 1990 年 3 月 3 日。 故此别整那些没用的了,直接生成就行。
只要你前 8 位是 19900303,后面 6 位是 123456,最终两笔凑成 123456,你就能拿到一个身份证号,它对应的生日正是 1990 年 3 月 3 日。 实际上,生成身份证号生日的逻辑,就是让你把前 8 位设为年月日,后 6 位设为任意 6 位数,最终两笔凑成 123456。
这样算出来的身份证号,就能对应上你真的生日。 记住了,身份证号是个死的,它规定了你的出生年月日。而你生成身份证号生日公式,实际上是让死板的身份证变成活的,它能告诉你,这个身份证上写的年月日,就是你生日的真写照。 故此别再去研究啥复杂的算法了。身份证生成生日,实际上就是把前 8 位设为年月日,后 6 位设为任意 6 位数,最终两笔凑成 123456。
这样算出来的身份证号,就能对应上你真的生日。 话说回来,实际上你根本不需求写代码,也不需求记啥公式。
只要你拿着一个计算器,写上那 8 位数字,剩下的随意填,最终两笔加起来等于 123456,你就能生成一个身份证号。
这种好办的逻辑,比啥"10 的 8 次方减 1"都要直观得多。
比如你写 19900303 123456,算出来是 123456123456,正好对应 1990 年 3 月 3 日。 故此别整那些没用的了,直接生成就行。
只要你前 8 位是 19900303,后面 6 位是 123456,最终两笔凑成 123456,你就能拿到一个身份证号,它对应的生日正是 1990 年 3 月 3 日。