找回密码
 加入
搜索
查看: 21885|回复: 25

[AU3基础] 如何写一个,随机生成一个18位的身份证号码

 火.. [复制链接]
发表于 2013-1-19 15:15:07 | 显示全部楼层 |阅读模式
我想写一个随机生成一个18位的身份证号码,在游戏时,可以任意复制填 写资料。
发表于 2013-1-19 15:23:09 | 显示全部楼层
怎么随意,身份是有规范的
比如如果一个号码是xxxxxx1800xxxxxxxxx可以肯定是不存在的
发表于 2013-1-19 15:27:36 | 显示全部楼层
很简单的,百度下身份证的构成就可以~~
发表于 2013-1-19 19:55:47 | 显示全部楼层
好像身份证的最后一位是校验位
发表于 2013-1-19 19:55:53 | 显示全部楼层
本帖最后由 xms77 于 2013-1-19 19:57 编辑

好像身份证的最后一位是校验位
网速不给力啊,一不小心就重复发帖了
发表于 2013-1-19 20:14:27 | 显示全部楼层
ABCDEF12345678abcX

ABCDEF-地区代码
12345678-出生日期
abc-随机数
X-男为偶数,女为奇数

仅供参考...
发表于 2013-1-19 20:15:54 | 显示全部楼层
X,网上一随手一搜大把的身份证号生成器...
发表于 2013-1-20 06:32:53 | 显示全部楼层
谢谢提供,
发表于 2013-1-21 13:33:33 | 显示全部楼层
回复 6# 邪恶海盗
我最后一位是x,到底是奇数还是偶数。本人是男性!
发表于 2013-1-21 13:38:30 | 显示全部楼层
回复 9# xms77
怪物
发表于 2013-1-21 13:55:25 | 显示全部楼层
回复 10# netegg
原来是x表示10,就像有些钟面上的X,XI,XII

校验码  (身份证最后一位)是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且我国的计算机应用系统也不承认19位的身份证号码。Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。身份证第18位(校验码)的计算方法   1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。   2、将这17位数字和系数相乘的结果相加。   3、用加出来和除以11,看余数是多少?   4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2 。   5、通过上面得知如果余数是2,身份证的最后一位号码就是罗马数字X。如果余数是10,就会在身份证的第18位数字上出现的是2。
发表于 2013-1-21 17:06:19 | 显示全部楼层
回复 9# xms77


难道你的身份证最后一位是奇数?
发表于 2013-1-21 17:11:22 | 显示全部楼层
回复 11# xms77


    坑爹的吧?

记得以前部分地区是17位的身份证号,升级18时就在后加加上一位X/Y,哪个是男哪个是女我忘记了,反正以前我家老头子最身份证最后一位就是字母,貌似换二代证又改成数字了...
发表于 2013-1-22 18:40:05 | 显示全部楼层
Func MAKECHECKCODE($iD);根据17位身份证生成第18位校验码
        If StringLen($id) <> 17 Then Return -1
        Local $W1[18],$code[12],$A[18],$sum = 0,$y,$checkcode
        $W1=StringSplit("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2",",")
        $code=StringSplit("1,0,x,9,8,7,6,5,4,3,2",",")
        For $I = 1 to StringLen($id)
                 $A[$I] = StringMid($id,$I,1)
                 $SUM = $sum + $A[$I] * $w1[$I]
        Next
        $y = Mod ($sum,11)
        $checkcode = $code[$y + 1]
        Return $checkcode
EndFunc
发表于 2013-1-23 12:04:37 | 显示全部楼层
$areastr = "130230"  ;;地区代码

if stringlen($areastr) <> 6 then Exit                       ;;地区代码不为六位则ContinueLoop
$mon = Random(1,12,1)   ;取随机月
IF $MON = 2 THEN   ;;如果随机月为二月,则随机日最大取28,否则最大30
        $YNTWO = 28
ELSE
        $YNTWO = 30
ENDIF
IF STRINGLEN($mon) = 1 THEN        $mon = "0" & $mon    ;;如果随机月为一位字符则前面补零
$day = Random(1,$ynTWO,1)    ;;;取随机日
IF STRINGLEN($day) = 1 THEN        $day = "0" & $day
$SERIAL = Random(01,99,1)  ;;取随机顺序码
IF STRINGLEN($SERIAL) = 1 THEN  $SERIAL = "0" & $SERIAL
$GERDER = RANdom(1,9,1)  ;;取随机性别
$BODY =  $areastr & Random(1970,1987,1) & $mon & $day & $SERIAL & $GERDER   ;身份证前十七位本体码
MsgBox(0,"身份证",$BODY & MAKECHECKCODE($BODY) )


;;;本函数为身份证号码校验码生成函数
;;;调用方式MAKECHECKCODE($ID),$ID为身份证号码前十七位,失败返回-1,成功则返回校验码
FUNC MAKECHECKCODE($iD)
IF STRINGLEN($id) <> 17 THEN RETURN -1
LOCAL $W1[18],$code[12],$A[18],$sum = 0,$y,$checkcode
$W1[1] = 7
$W1[2] = 9
$W1[3] = 10
$W1[4] = 5
$W1[5] = 8
$W1[6] = 4
$W1[7] = 2
$W1[8] = 1
$W1[9] = 6
$W1[10] = 3
$W1[11] = 7
$W1[12] = 9
$W1[13] = 10
$W1[14] = 5
$W1[15] = 8
$W1[16] = 4
$W1[17] = 2
$code[1] = 1
$code[2] = 0
$code[3] = "x"
$code[4] = 9
$code[5] = 8
$code[6] = 7
$code[7] = 5
$code[8] = 5
$code[9] = 4
$code[10] = 3
$code[11] = 2
for $I = 1 to stringlen($id)
        $A[$I] = STRINGMID($id,$I,1)
        $SUM = $sum + $A[$I] * $w1[$I]
NEXT
$y = MOD ($sum,11)
$checkcode = $code[$y + 1]
return $checkcode
ENDFUNC
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-3 14:24 , Processed in 0.075998 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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