TC官方合作论坛

 找回密码
 立即注册
查看: 1104|回复: 4

[源码分享] 生成18位身份证,为了方便,没做的太严谨!

[复制链接]
发表于 2015-2-5 18:54:48 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 qq32881 于 2015-2-5 18:56 编辑

  1. 功能 校验()
  2.     id=类型.转字符型(辅助.随机数(110100,659000))&类型.转字符型(辅助.随机数(1900,2010))&"0"&类型.转字符型(辅助.随机数(1,9))&类型.转字符型(辅助.随机数(10,28))&类型.转字符型(辅助.随机数(100,999))   
  3.     系数=数组[17]
  4.     系数[0]=7
  5.     系数[1]=9
  6.     系数[2]=10
  7.     系数[3]=5
  8.     系数[4]=8
  9.     系数[5]=4
  10.     系数[6]=2
  11.     系数[7]=1
  12.     系数[8]=6
  13.     系数[9]=3
  14.     系数[10]=7
  15.     系数[11]=9
  16.     系数[12]=10
  17.     系数[13]=5
  18.     系数[14]=8
  19.     系数[15]=4
  20.     系数[16]=2
  21.     对应值=数组[11]
  22.     对应值[0]=1
  23.     对应值[1]=0
  24.     对应值[2]="x"
  25.     对应值[3]=9
  26.     对应值[4]=8
  27.     对应值[5]=7
  28.     对应值[6]=6
  29.     对应值[7]=5
  30.     对应值[8]=4
  31.     对应值[9]=3
  32.     对应值[10]=2
  33.     //乘积
  34.     变量 乘积
  35.     遍历(i=0;i<17;i++)
  36.         截取数值 = 字符串.截取(id,i,i+1)
  37.         乘积=乘积+截取数值*系数[i]
  38.     遍历结束
  39.     //乘积除11求余
  40.     余值 = 乘积%11
  41.     校验位 = 对应值[余值]
  42.     返回 id&校验位
  43. 功能结束[/i]
  44. [i]
复制代码


回复

使用道具 举报

发表于 2015-2-5 20:22:39 | 显示全部楼层
名字+号码=身份证
回复 支持 反对

使用道具 举报

发表于 2015-2-6 09:17:54 | 显示全部楼层
次奥 这是神马 生成出来的能用么


身份证号码中的校验码是身份证号码的最后一位,是根据〖中华人民共和国国家标准GB 11643-1999〗中有关公民身份号码的规定,根据精密的计算公式计算出来的,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码,最后一位是数字校验码。
  [1]
身份证校验码的依据
  身份证最后一位)是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且我国的计算机应用系统也不承认19位的身份证号码。Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。
身份证校验码的计算方法
  1、将前面的身份证号码17位数分别乘以不同的系数。第i位对应的数为[2^(18-i)]mod11。从第一位到第十七位的系数分别为: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,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2;
  例如:某男性的身份证号码是34052419800101001X。我们要看看这个身份证是不是合法的身份证。
  首先:我们得出,前17位的乘积和是189
  然后:用189除以11得出的结果是17 + 2/11,也就是说余数是2。
  最后:通过对应规则就可以知道余数2对应的数字是x。所以,这是一个合格的身份证号码。

编辑本段身份证校验码的EXCEL计算公式
  请在A1单元格输入18位身份证号码.
  有的时候需要修改单元格的格式为文本,否则数字会被去近似值.
  然后再任意单元格输入下面的公式就可以得到校验码.
  看看是否与最后一位相符.就知道身份证号码是否符合编码规则了.
  =LOOKUP(MOD(MID($A$1,1,1)*MOD(2^17,11)+MID($A$1,2,1)*MOD(2^16,11)+MID($A$1,3,1)*MOD(2^15,11)+MID($A$1,4,1)*MOD(2^14,11)+MID($A$1,5,1)*MOD(2^13,11)+MID($A$1,6,1)*MOD(2^12,11)+MID($A$1,7,1)*MOD(2^11,11)+MID($A$1,8,1)*MOD(2^10,11)+MID($A$1,9,1)*MOD(2^9,11)+MID($A$1,10,1)*MOD(2^8,11)+MID($A$1,11,1)*MOD(2^7,11)+MID($A$1,12,1)*MOD(2^6,11)+MID($A$1,13,1)*MOD(2^5,11)+MID($A$1,14,1)*MOD(2^4,11)+MID($A$1,15,1)*MOD(2^3,11)+MID($A$1,16,1)*MOD(2^2,11)+MID($A$1,17,1)*MOD(2^1,11),11),{0;1;2;3;4;5;6;7;8;9;10},{1;0;"X";9;8;7;6;5;4;3;2})
  用数组公式计算:=MID("10X98765432",MOD(SUM(MID(C2,ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1) 按ctrl+shift+Enter 计算
回复 支持 反对

使用道具 举报

发表于 2015-2-6 10:19:06 | 显示全部楼层
敢不敢把省份,出生年月日规范化
回复 支持 反对

使用道具 举报

发表于 2015-6-26 08:00:51 | 显示全部楼层
{:soso__10169062262133571330_1:}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-5-12 23:24 , Processed in 0.047226 second(s), 22 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

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