无忧启动论坛

标题: 身份证号码信息查询器[07-3-6更新] [打印本页]

作者: namejm    时间: 2007-3-5 17:35
标题: 身份证号码信息查询器[07-3-6更新]
  使用方法:请把附件中的date.txt与本代码保存在同一目录下使用。
  注意事项:本数据库源于中华人民共和国国家统计局2006年12月31日的最新数据,在此之前,若因行政区划有变动而造成原有的行政区划代码被取消、变更,会导致部分合法ID被认为非法。

  1. @echo off
  2. :: 功能:
  3. ::     1、根据号码查询性别、出生日期和户籍所在地
  4. ::     2、15位号码升18位
  5. ::     3、根据户籍所在地和出生日期批量生成身份证号码
  6. ::
  7. ::  已知bug:
  8. ::      1、输入检测不严格
  9. ::      2、生成ID的速度较慢
  10. ::
  11. :: Code by JM 2007-3-4 CMD@XP
  12. ::
  13. :: 更新历史:
  14. ::
  15. :: 07.3.6
  16. ::   更正了15位号码升18位时始终显示非法号码的错误;

  17. mode con lines=20 cols=50
  18. title 身份证号码信息查询器
  19. setlocal enabledelayedexpansion

  20. set check_num=10X98765432

  21. :Main
  22. cls
  23. set flag=
  24. set IDflag=
  25. echo.&echo.&echo.&echo.
  26. echo             1、通过18位号码查询基本信息
  27. echo.
  28. echo             2、15位号码升18位
  29. echo.
  30. echo             3、生成指定地区的身份证号码
  31. echo.&echo.&echo.
  32. echo __________________________________________________
  33. echo.
  34. set choice=
  35. set /p choice=       请输入功能代码(退出请直接回车):

  36. if "%choice%"=="1" goto Get_Info
  37. if "%choice%"=="2" goto UpDate
  38. if "%choice%"=="3" goto Creat_ID
  39. if defined choice goto Main
  40. exit

  41. :Get_Info
  42. cls
  43. echo.&echo.&echo.&echo.&echo.
  44. set ID=
  45. set /p ID=      请输入18位身份证号码:
  46. call :Check_ID %ID%
  47. if defined flag (
  48.     call :PickUp_Info
  49. ) else call :ERR
  50. echo                 按任意键返回主界面...
  51. pause>nul
  52. goto Main

  53. :UpDate
  54. cls
  55. echo.&echo.&echo.&echo.&echo.
  56. set IDflag=15
  57. set ID=
  58. set /p ID=      请输入15位身份证号码:
  59. set ID_15=%ID%
  60. set ID=%ID:~0,6%19%ID:~6%
  61. call :Check_ID %ID%
  62. if defined flag (
  63.     call :PickUp_Info
  64. ) else call :ERR
  65. echo                 按任意键返回主界面...
  66. pause>nul
  67. goto Main

  68. :Creat_ID
  69. cls
  70. echo.&echo.
  71. echo     地名只能检索到县级及其之上的行政区划;必须
  72. echo.
  73. echo   按照行政级别的顺序输入,可以跳级输入,多个关键
  74. echo.
  75. echo   字用空格分隔。比如:四川  成都 青羊区 或者
  76. echo.
  77. echo   四川 青羊区 或者 成都 。
  78. echo.
  79. echo    生日必须是6位数字的格式,比如:20070130 。
  80. echo.
  81. echo __________________________________________________
  82. echo.
  83. set place=
  84. set birthday=
  85. set exp=
  86. set /p place= 请输入地区关键字:
  87. echo.
  88. set /p birthday=  请输入8位格式的出生日期:
  89. if "%birthday:~7,1%"=="" (call :ERR & pause & goto Main)
  90. if not "%birthday:~0,8%"=="%birthday%" (call :ERR & pause & goto Main)
  91. set /a day=1%birthday% 2>nul||(call :ERR & pause & goto Main)
  92. if not "%day:~1%"=="%birthday%" (call :ERR & pause & goto Main)

  93. cls
  94. echo.&echo.
  95. echo     符合条件的号码有^(中途可按 Ctrl^+C 暂停执行^):
  96. echo.
  97. for %%i in (%place%) do set exp=!exp!.*%%i
  98. for /f "tokens=1*" %%i in ('findstr "%exp:~2%" date.txt') do (
  99.     set ID_place=%%i
  100.     set ID_tmp=!ID_place:~0,1!
  101.     for /l %%j in (1,1,9) do (
  102.         if !ID_tmp! equ %%j call :IDs
  103.     )
  104. )
  105. if not defined flag (
  106.     echo.&echo.&echo.
  107.     echo          数据库中检索不到关键字为 %place% 的地名!
  108.     echo.&echo.&echo.
  109. )
  110. echo                 按任意键返回主界面...
  111. pause>nul
  112. goto Main

  113. rem ==== 检测号码是否合法 ====
  114. :Check_ID
  115. set ID=%1
  116. set ID_tmp=%1
  117. if defined IDflag (
  118.     if "%ID:~16,1%"=="" set flag=&goto :eof
  119.     if not "%ID:~0,17%"=="%1" set flag=&goto :eof
  120. ) else (
  121.     if "%ID:~17,1%"=="" set flag=&goto :eof
  122.     if not "%ID:~0,18%"=="%1" set flag=&goto :eof
  123.     if /i "%ID:~-1%"=="x" set ID_tmp=%ID:~0,-1%
  124. )
  125. set /a ID_tmp_1=1!ID_tmp:~0,6! 2>nul||(set flag=&goto :eof)
  126. set /a ID_tmp_2=1!ID_tmp:~6,8! 2>nul||(set flag=&goto :eof)
  127. set /a ID_tmp_3=1!ID_tmp:~14! 2>nul||(set flag=&goto :eof)
  128. if not "!ID_tmp_1:~1!!ID_tmp_2:~1!!ID_tmp_3:~1!"=="!ID_tmp!" set flag=&goto :eof
  129. set sum=0
  130. set str_wi=7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1
  131. for /l %%i in (0,1,16) do (
  132.     set ai=!ID:~%%i,1!
  133.     call :Get_Num %%i !str_wi!
  134.     set /a product=!ai!*!wi! 2>nul
  135.     set /a sum+=!product!
  136. )
  137. set /a mod=%sum%%%11
  138. set last_num=!check_num:~%mod%,1!
  139. if defined IDflag (
  140.     set ID=%ID%%last_num%
  141.     set flag=1
  142.     goto :eof
  143. )
  144. if /i "%ID:~-1%"=="%last_num%" (
  145.     set flag=1
  146. ) else set flag=
  147. goto :eof

  148. :Get_Num
  149. :: 提取 %str_wi% 中对应位置上的数值
  150. for /l %%i in (1,1,%1) do shift
  151. set wi=%2
  152. goto :eof

  153. :PickUp_Info
  154. set char=%ID:~-2,1%
  155. set /a mod=%char%%%2
  156. if %mod% equ 0 (
  157.     set SEX=女
  158. ) else set SEX=男
  159. for /f "tokens=1*" %%i in ('findstr "%ID:~0,6%" date.txt') do (
  160.     set flag=exist
  161.     cls
  162.     echo.&echo.&echo.&echo.
  163.     if defined IDflag (
  164.         echo     身份证号码:%ID_15%
  165.         echo.
  166.         echo     升位后号码:%ID%
  167.     ) else echo     身份证号码:%ID%
  168.     echo.
  169.     echo     性      别:      %SEX%
  170.     echo.
  171.     echo     出生日期:%ID:~6,4% 年 %ID:~10,2% 月 %ID:~12,2% 日
  172.     echo.
  173.     echo     户籍所在地:%%j
  174.     echo.&echo.&echo.&echo.
  175. )
  176. if not "%flag%"=="exist" call :ERR
  177. goto :eof

  178. rem ==== 生成合法的号码 ====
  179. :IDs
  180. for /l %%i in (0,1,999) do (
  181.     for %%j in (0 1 2 3 4 5 6 7 8 9 X) do (
  182.         set ID=00%%i%%j
  183.         call :Check_ID %ID_place%%birthday%!ID:~-4!
  184.         if defined flag echo                 %ID_place%%birthday%!ID:~-4!
  185.     )
  186. )
  187. goto :eof

  188. rem ==== 出错提示 ====
  189. :ERR
  190. echo.&echo.
  191. echo                 非法号码
  192. echo.&echo.&echo.
  193. goto :eof
复制代码

[ 本帖最后由 namejm 于 2007-3-6 09:55 PM 编辑 ]

数据库及背景知识.rar

26.43 KB, 下载次数: 1459, 下载积分: 无忧币 -2


作者: weylmann    时间: 2007-3-5 21:41
收下,谢谢
作者: 老毛桃    时间: 2007-3-6 09:55
是个好咚咚,收藏先
作者: 难以忘记你    时间: 2007-3-6 19:05
那自己试了下哈哈!正确!
作者: luqicai    时间: 2007-3-7 01:58
怎么用的?我把上面的代码保存为TXT文件后改为BAT文件放在了同一目录下,晕了,查不了。我试了几个福建的,都是非法,
作者: huangwenjia    时间: 2007-3-8 14:07
以前用VB做过两个,只做了升位和查信息,没有做生成的,地区代码分别用.INI和.MDB保存,关键处是在于校验位的生成。
作者: xypcmac    时间: 2007-3-8 14:20
这种批处理值得学习
作者: namejm    时间: 2007-3-8 18:06
原帖由 huangwenjia 于 2007-3-8 02:07 PM 发表
关键处是在于校验位的生成。

  确实是这样。因为我不知道 加权因子 是如何通过一系列的算术运算得来的,只能采用现成的校验码序列,按照数位来提取对应的校验码,从而导致生成ID的时候,速度比较慢。希望有知道的兄弟能告诉我 加权因子 是怎么求出来的。
作者: jioncy    时间: 2007-3-10 20:24
这个做了有啥用途呢~
作者: wiseror    时间: 2007-3-11 10:13
呵呵 不错 我下过 有点不是很准
作者: namejm    时间: 2007-3-11 14:35
原帖由 wiseror 于 2007-3-11 10:13 AM 发表
呵呵 不错 我下过 有点不是很准

  哪个地方不是很准?是不是因为我在顶楼所说的那种情况?
作者: aassdd    时间: 2007-3-12 10:06
好东西一点都不嫌多.....下来先.
作者: 龙啸    时间: 2007-3-12 15:02
好东西,收起了!
作者: tuxw    时间: 2007-3-13 14:38
批处理功底不错
作者: SunTB    时间: 2007-3-16 15:27
原帖由 namejm 于 2007-3-8 06:06 PM 发表

  确实是这样。因为我不知道 加权因子 是如何通过一系列的算术运算得来的,只能采用现成的校验码序列,按照数位来提取对应的校验码,从而导致生成ID的时候,速度比较慢。希望有知道的兄弟能告诉我 加权因子 ...


百度搜索下好象有,反正我就是参考网上帖子介绍的自己作了了XLS文档来实现同样功能
作者: sddylyd    时间: 2007-3-17 16:13
下载看看
作者: 6618    时间: 2007-3-19 00:51
支持原创,学习一下里面的批处理。
作者: sensensen    时间: 2007-3-20 23:48
不知有啥用途,下来看看!
作者: zhangxhliu    时间: 2007-3-25 07:53
下来看看。。
作者: rghost    时间: 2007-3-25 13:10
这个是什么哦
作者: xkyt    时间: 2007-3-25 13:17
是的,我原先也下过一个,好像不是很准
作者: maalone    时间: 2007-3-25 17:09
好东西,下了试试
作者: bingxiao20    时间: 2007-3-27 09:50
不错  好东西。。收下来了
作者: mfkwgij    时间: 2007-3-27 13:56
是个好咚咚,收藏先
作者: michael_xm    时间: 2007-4-1 02:26
批处理写的不错. 学习了
作者: finove    时间: 2007-4-1 20:36
收下了。慢慢学习!:)
作者: 太阳上的鱼    时间: 2007-4-2 14:23
试试看,这个也有专门的身份证生成软件,有界面看起来应该舒服一点
作者: cqswat    时间: 2007-4-7 14:29
不会吧,这种东西都有
作者: 任我行之狂风    时间: 2007-4-26 00:08
虽然查了一下我自己的身份证出现个“非法”,但楼主玩批处理的深度很值得学习。佩服与感谢-ing……:victory:
作者: shamobaiyang    时间: 2007-4-27 22:38
下载下来学学,
:) :) :)
作者: shamobaiyang    时间: 2007-4-27 22:38
下载下来学学,
:) :) :)
作者: able768    时间: 2007-4-30 17:49
不错,下载下来玩玩:)
作者: skyhawks    时间: 2007-5-1 15:06
提示: 作者被禁止或删除 内容自动屏蔽
作者: 狂野    时间: 2007-5-3 15:25
好东东,一定要收藏。先谢谢了
作者: maalone    时间: 2007-5-4 00:52
这个就是“简单美”,呵呵,做界面反而没意思了
作者: 狂野    时间: 2007-5-5 11:37
好像不怎么准确?有新的数据库吗
作者: cjjdaq    时间: 2007-5-5 13:21
好玩么 ?弄回来玩玩
作者: yaqiz    时间: 2007-5-6 21:20
非常不错。。。测试通过。哈哈。谢谢!
作者: est    时间: 2007-5-6 23:59
原来楼主就是传说中的namejm
作者: hzy_888    时间: 2007-5-9 13:51
顶,好东西,我收下了
作者: sweetger    时间: 2007-5-13 11:58
LZ厉害啊。。。。顶了
作者: Ddyou    时间: 2007-5-13 17:17
查询过,我的呢准了呢。
楼主的批处理强啊
作者: lcd0413    时间: 2007-5-15 12:40
标题:
收下先,楼主果然强悍。。。
作者: boy_hxm    时间: 2007-6-18 22:47
标题: abc
很好...谢谢楼主.
作者: zhou805064    时间: 2007-6-23 00:04
不错  好东西:)
作者: 太湖渔民    时间: 2007-7-2 23:15
好玩~~~~~~~~~~~
作者: wiwd    时间: 2007-8-2 16:33
顶..................
作者: wjkw    时间: 2007-8-2 19:23
呵呵 不错 .我先收藏了
作者: ziyun    时间: 2009-12-9 14:51
又一个精品。谢谢楼主,太谢谢了,支持
作者: jspeng    时间: 2009-12-17 19:08
偶也查了一下,很不错。LZ写批处理的能力真的不一般啊。
作者: heanv    时间: 2010-5-10 06:01
很准的
楼主真是批处理高手啊。
作者: p3506    时间: 2010-5-27 19:56
谢谢提供,下载看看。
作者: hzp860822    时间: 2010-9-24 08:32
这个好象没什么用处!
作者: dopodfan    时间: 2011-3-30 01:58
标题: 回复 #1 namejm 的帖子
很强大的批处理啊,支持




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3