找回密码
 欢迎注册
查看: 15735|回复: 14

[提问] 破译身份证

[复制链接]
发表于 2015-10-18 19:00:10 来自手机 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
一名男子身份证前十七位为一质数,第十八位为x,前六位为422121,能破译他的身份证吗?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2015-10-19 07:54:40 | 显示全部楼层
此人,男,湖北省黄冈地区黄冈县人士,满足要求的应很多。若知其大概年龄,可收窄搜索范围。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2015-10-19 10:57:52 | 显示全部楼层
gxqcn 发表于 2015-10-19 07:54
此人,男,湖北省黄冈地区黄冈县人士,满足要求的应很多。若知其大概年龄,可收窄搜索范围。

没有黄冈县吧,

点评

我也是百度得来的  发表于 2015-10-19 11:49
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2015-10-19 11:12:13 来自手机 | 显示全部楼层
数值越大,质数越稀疏,17位仍是质数就可把范围缩小不少吧!

点评

@wayne @aimisiyou 校验码已经考虑了啊  发表于 2015-10-20 09:54
身份证的最后一位是校验码,这个可以进一步缩小  发表于 2015-10-19 12:56
如果没有和他同城同性别同年同月同日生的人,那么不确定度为33,这还差不多  发表于 2015-10-19 11:30
年份范围×365×1000×质数密度×校验通过概率=50×365×1000×0.02×0.09=32850,不确定度太大了  发表于 2015-10-19 11:27
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2015-10-19 11:20:04 来自手机 | 显示全部楼层
前17位是质数已经说明性别了,信息有点累赘了。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2015-10-19 11:37:11 来自手机 | 显示全部楼层
顺便说一下,像我们网上订购的火车票,虽然信息上身份证只有4个用星号隐藏,但可能数不超过40个!所以建议用完后及时处理,避免信息外漏!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2015-10-19 13:03:10 | 显示全部楼层
本帖最后由 aimisiyou 于 2015-10-19 13:05 编辑
aimisiyou 发表于 2015-10-19 11:12
数值越大,质数越稀疏,17位仍是质数就可把范围缩小不少吧!


@KeyTo9_Fans 没你说的那么多.其实应该*500,而不是*1000.另外第十八位校验码是根据前十七位计算得出,故还有这一限制条件.
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2015-10-20 08:57:37 | 显示全部楼层
  1. Clear["Global`*"];(*Clear all variables*)
  2. (*校验码的数字*)
  3. checkseq={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
  4. Do[
  5.     (*前17位的号码*)
  6.     ID17=422121*10^11+(year*10^4+month*10^2+day)*1000+num;
  7.     IDDigits=IntegerDigits[ID17];
  8.     If[Mod[IDDigits.checkseq,11]==10&&PrimeQ[ID17],Print[ID17]],
  9.     {year,1900,2015},{month,1,12},{day,1,31},{num,1,999,2}]
复制代码


看看这个代码就知道能运行处多少个结果了!
太多了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2015-11-5 22:43:01 | 显示全部楼层
cn8888 发表于 2015-10-20 08:57
看看这个代码就知道能运行处多少个结果了!
太多了

今天下午下载并安装了M,并且是第一次使用M,复制了你的代码稍作修改
  1. Clear["Global`*"];(*Clear all variables*)(*校验码的数字*)
  2. checkseq = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
  3. Do[(*前17位的号码*)
  4. ID17 = 422121*10^11 + (year*10^4 + month*10^2 + day)*1000 + num;
  5. ID19 = ID17*100 + 29;
  6. IDDigits = IntegerDigits[ID17];
  7. If[Mod[IDDigits.checkseq, 11] == 2 && PrimeQ[ID17] && PrimeQ[ID19],
  8.   Print[ID17]], {year, 1983, 1983}, {month, 1, 12}, {day, 1, 31}, {num, 1, 999, 2}]
复制代码


运行结果怎么会有遗漏?还是我哪里修改错误?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2015-11-9 12:18:27 | 显示全部楼层
aimisiyou 发表于 2015-11-5 22:43
今天下午下载并安装了M,并且是第一次使用M,复制了你的代码稍作修改

你的目的是什么,你说了吗?我看不懂你想干什么
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-5-5 08:21 , Processed in 0.045564 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表