aimisiyou 发表于 2015-10-18 19:00:10

破译身份证

一名男子身份证前十七位为一质数,第十八位为x,前六位为422121,能破译他的身份证吗?

gxqcn 发表于 2015-10-19 07:54:40

此人,男,湖北省黄冈地区黄冈县人士,满足要求的应很多。若知其大概年龄,可收窄搜索范围。

wayne 发表于 2015-10-19 10:57:52

gxqcn 发表于 2015-10-19 07:54
此人,男,湖北省黄冈地区黄冈县人士,满足要求的应很多。若知其大概年龄,可收窄搜索范围。

没有黄冈县吧,:lol

aimisiyou 发表于 2015-10-19 11:12:13

数值越大,质数越稀疏,17位仍是质数就可把范围缩小不少吧!

aimisiyou 发表于 2015-10-19 11:20:04

前17位是质数已经说明性别了,信息有点累赘了。

aimisiyou 发表于 2015-10-19 11:37:11

顺便说一下,像我们网上订购的火车票,虽然信息上身份证只有4个用星号隐藏,但可能数不超过40个!所以建议用完后及时处理,避免信息外漏!

aimisiyou 发表于 2015-10-19 13:03:10

本帖最后由 aimisiyou 于 2015-10-19 13:05 编辑

aimisiyou 发表于 2015-10-19 11:12
数值越大,质数越稀疏,17位仍是质数就可把范围缩小不少吧!

@KeyTo9_Fans 没你说的那么多.其实应该*500,而不是*1000.另外第十八位校验码是根据前十七位计算得出,故还有这一限制条件.

cn8888 发表于 2015-10-20 08:57:37

Clear["Global`*"];(*Clear all variables*)
(*校验码的数字*)
checkseq={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
Do[
    (*前17位的号码*)
    ID17=422121*10^11+(year*10^4+month*10^2+day)*1000+num;
    IDDigits=IntegerDigits;
    If==10&&PrimeQ,Print],
    {year,1900,2015},{month,1,12},{day,1,31},{num,1,999,2}]


看看这个代码就知道能运行处多少个结果了!
太多了

aimisiyou 发表于 2015-11-5 22:43:01

cn8888 发表于 2015-10-20 08:57
看看这个代码就知道能运行处多少个结果了!
太多了
今天下午下载并安装了M,并且是第一次使用M,复制了你的代码稍作修改
Clear["Global`*"];(*Clear all variables*)(*校验码的数字*)
checkseq = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
Do[(*前17位的号码*)
ID17 = 422121*10^11 + (year*10^4 + month*10^2 + day)*1000 + num;
ID19 = ID17*100 + 29;
IDDigits = IntegerDigits;
If == 2 && PrimeQ && PrimeQ,
Print], {year, 1983, 1983}, {month, 1, 12}, {day, 1, 31}, {num, 1, 999, 2}]

运行结果怎么会有遗漏?还是我哪里修改错误?

cn8888 发表于 2015-11-9 12:18:27

aimisiyou 发表于 2015-11-5 22:43
今天下午下载并安装了M,并且是第一次使用M,复制了你的代码稍作修改




你的目的是什么,你说了吗?我看不懂你想干什么
页: [1]
查看完整版本: 破译身份证