新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论.NET,C#,ASP,VB技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Dot NET,C#,ASP,VB 』 → [转帖]一个18位身份证校验计算函数(ASP) 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 4844 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [转帖]一个18位身份证校验计算函数(ASP) 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客楼主
    发贴心情 [转帖]一个18位身份证校验计算函数(ASP)

    因需要对15位旧身份证号码进行升位和校验、查询处理,又没有搜索到现成的函数,于是自己写了一个简单的过程,希望能够帮得上需要的朋友。
    本函数的功能单一,只能校验第18位号码是否正确或者取得第18位号码,其他功能留给大家自己扩展吧!

    <%
    ' Version: 1.0.1
    ' Author: sfply(sfply@163.com)
    ' Last Modified: 2004/7/17 12:03
    ' Src是身份证号码,可以是15位也可以是18位,15位时只能返回验证码方式使用
    ' iChk参数取值真假,真代表校验Src是否18位身份证,并且校验第18位是否正确号码而确定是否有效身份证,返回只值为true或false
    ' 假代表返回正确的校验码,返回值为(1~x)
    dim myIdentify
    myIdentify = "36050219781218133?"

    response.write chkIdentiyCard(myIdentify,false)

    Function chkIdentiyCard(Src,iChk)
    dim myWi,myAi,mySrc(17),i,myCount
    myAi = "10X98765432"
    myWi = split("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2",",")
    if iChk then
    if len(Src) = 18 then
    for i = 0 to 16
    mySrc(i) = mid(Src,i+1,1)
    myCount = myCount + mySrc(i) * myWi(i)
    next
    if mid(myAi,(mycount mod 11)+1,1) = right(Src,1) then
    chkIdentiyCard = true '返回结果,TRUE为合法身份证验证码
    else
    chkIdentiyCard = false '返回结果,FALSE为非法身份证验证码
    end if
    else
    chkIdentiyCard = false '因为不是18位身份证所以返回FALSE
    end if
    else
    if len(Src) = 15 or len(Src) = 18 then
    if len(Src) = 15 then Src = mid(Src,1,6) & "19" & mid(Src,7,9)
    for i = 0 to 16
    mySrc(i) = mid(Src,i+1,1)
    myCount = myCount + mySrc(i) * myWi(i)
    next
    chkIdentiyCard = mid (myAi,(mycount mod 11)+1,1) '返回正确的验证码
    else
    chkIdentiyCard = false '输入不不是15位或18位身份证号
    end if
    end if
    End Function
    %>

    关于身份证第18是怎么计算的,原理如下

    根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

    地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。生日期码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。顺序码表示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。下面举例说明该计算方法。

    15位的身份证编码首先把出生年扩展为4位,简单的就是增加一个19,但是这对于1900年出生的人不使用(这样的寿星不多了)

    某男性公民身份号码本体码为34052419800101001,首先按照公式⑴计算:

    ∑(ai×Wi)(mod 11)……………………………………(1)

    公式(1)中:
    i----表示号码字符从由至左包括校验码在内的位置序号;
    ai----表示第i位置上的号码字符值;
    Wi----示第i位置上的加权因子,其数值依据公式Wi=2(n-1)(mod 11)计算得出。

    i 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

    ai 3 4 0 5 2 4 1 9 8 0 0 1 0 1 0 0 1 a1

    Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1

    ai×Wi 21 36 0 25 16 16 2 9 48 0 0 9 0 5 0 0 2 a1

    根据公式(1)进行计算:

    ∑(ai×Wi) =(21+36+0+25+16+16+2+9+48++0+0+9+0+5+0+0+2) = 189

    189 ÷ 11 = 17 + 2/11

    ∑(ai×Wi)(mod 11) = 2

    然后根据计算的结果,从下面的表中查出相应的校验码,其中X表示计算结果为10:

    ∑(ai×WI)(mod 11) 0 1 2 3 4 5 6 7 8 9 10
    校验码字符值ai 1 0 X 9 8 7 6 5 4 3 2
    根据上表,查出计算结果为2的校验码为所以该人员的公民身份号码应该为 34052419800101001X。

    a[0]*7+a[1]*9+a[2]*10+a[3]*5+a[4]*8+a[5]*4+a[6]*2+a[7]*1+a[8]*6+a[9]*3
    +a[10]*7+a[11]*9+a[12]*10+a[13]*5+a[14]*8+a[15]*4+a[16]*2
    %11  

    来源不详


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/2/23 15:45:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/1 13:19:36

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    46.875ms