fjvip 发表于 2013-1-19 15:15:07

如何写一个,随机生成一个18位的身份证号码

我想写一个随机生成一个18位的身份证号码,在游戏时,可以任意复制填 写资料。

netegg 发表于 2013-1-19 15:23:09

怎么随意,身份是有规范的
比如如果一个号码是xxxxxx1800xxxxxxxxx可以肯定是不存在的

annybaby 发表于 2013-1-19 15:27:36

很简单的,百度下身份证的构成就可以~~

xms77 发表于 2013-1-19 19:55:47

好像身份证的最后一位是校验位

xms77 发表于 2013-1-19 19:55:53

本帖最后由 xms77 于 2013-1-19 19:57 编辑

好像身份证的最后一位是校验位
网速不给力啊,一不小心就重复发帖了{:face (229):}

邪恶海盗 发表于 2013-1-19 20:14:27

ABCDEF12345678abcX

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

仅供参考...

邪恶海盗 发表于 2013-1-19 20:15:54

X,网上一随手一搜大把的身份证号生成器...

weeks5 发表于 2013-1-20 06:32:53

谢谢提供,

xms77 发表于 2013-1-21 13:33:33

回复 6# 邪恶海盗
我最后一位是x,到底是奇数还是偶数。本人是男性!

netegg 发表于 2013-1-21 13:38:30

回复 9# xms77
怪物

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,哪个是男哪个是女我忘记了,反正以前我家老头子最身份证最后一位就是字母,貌似换二代证又改成数字了...

smartzbs 发表于 2013-1-22 18:40:05

Func MAKECHECKCODE($iD);根据17位身份证生成第18位校验码
        If StringLen($id) <> 17 Then Return -1
        Local $W1,$code,$A,$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

sunless 发表于 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,$code,$A,$sum = 0,$y,$checkcode
$W1 = 7
$W1 = 9
$W1 = 10
$W1 = 5
$W1 = 8
$W1 = 4
$W1 = 2
$W1 = 1
$W1 = 6
$W1 = 3
$W1 = 7
$W1 = 9
$W1 = 10
$W1 = 5
$W1 = 8
$W1 = 4
$W1 = 2
$code = 1
$code = 0
$code = "x"
$code = 9
$code = 8
$code = 7
$code = 5
$code = 5
$code = 4
$code = 3
$code = 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
页: [1] 2
查看完整版本: 如何写一个,随机生成一个18位的身份证号码