站长中国
设为首页 | 站长论坛

站长论坛 站长下载
您所在的位置: 站长中国 > 站长学院 > 数 据 库 > 其他相关 > 正文

数据库学习:查询新身份证(18位)的校验位
  2007年10月22日02:44:21  评论(0条) 字体:[ ]
相关热点:

  /*

  根据〖中华人民共和国国家标准 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

  when 0 then '1' when 1 then '0' when 2 then 'X' when 3 then '9'

  when 4 then '8' when 5 then '7' when 6 then '6' when 7 then '5'

  when 8 then '4' when 9 then '3' when 10 then '2'

  */

  /*

  以上为算法详细说明,下面是SQL的自定义函数,返回值为18位的校验码

  */

  Create function getCheckCode(@SFZH char(18))

  Returns char(1)

  As

  Begin

  declare @r char(1)

  declare @i int

  if len(@SFZH) <> 18

  set @r = '?'

  else

  set @i = cast(substring(@SFZH,1,1) as int) * 7

  +cast(substring(@SFZH,2,1) as int) * 9

  +cast(substring(@SFZH,3,1) as int) * 10

  +cast(substring(@SFZH,4,1) as int) * 5

  +cast(substring(@SFZH,5,1) as int) * 8

  +cast(substring(@SFZH,6,1) as int) * 4

  +cast(substring(@SFZH,7,1) as int) * 2

  +cast(substring(@SFZH,8,1) as int) * 1

  +cast(substring(@SFZH,9,1) as int) * 6

  +cast(substring(@SFZH,10,1) as int) * 3

  +cast(substring(@SFZH,11,1) as int) * 7

  +cast(substring(@SFZH,12,1) as int) * 9

  +cast(substring(@SFZH,13,1) as int) * 10

  +cast(substring(@SFZH,14,1) as int) * 5

  +cast(substring(@SFZH,15,1) as int) * 8

  +cast(substring(@SFZH,16,1) as int) * 4

  +cast(substring(@SFZH,17,1) as int) * 2

  set @i = @i - @i/11 * 11

  set @r = (case @i

  when 0 then '1' when 1 then '0' when 2 then 'X' when 3 then '9'

  when 4 then '8' when 5 then '7' when 6 then '6' when 7 then '5'

  when 8 then '4' when 9 then '3' when 10 then '2' else '/' end)

  Return(@r)

  End

  /* Usage:

  select dbo.getcheckcode('身份证号')

  */


收藏本文 打印 打印本文  推荐本文 告诉好友 投稿 投稿邮箱

站长排行

学院

新闻

专栏

盈利

[揭密网络黄链]中国留学生买凶专破日本
windows 2008中文版iis7+asp+php+Acces
贴吧发帖机使用教程(绝对原创)
超强弹出窗口代码,什么都挡不住
Windows Vista局域网网络连接设置
JSP语法(6)
FLASH视觉特效实例之地震效果
关于数据分页(转自www.codeproject.co
教你如何在Vista中设置麦克风
不用Photoshop 在线恶搞大头像
全国哀悼日网友自发QQ隐身上线 向死难
淘宝网卖家公然叫卖“艳照门”照片集
抗震救灾/鱼目混珠?
Google绿色专家质疑黑色背景网页节省资
阿里妈妈广告卖主全攻略
电影小说类相关关键字搜索量列表
爆笑 阿里就这样把亿告征服!
大脚:实战单页面优化关键词之——淘宝
国内各IT企业办公环境揭秘(多图)
心系灾区,点燃希望——手机QQ2008祈福
ECSHOP模板制作参考文档
悬挂阿里妈妈会否被百度惩罚
ECSHOP模板下载
阿里妈妈是否是中小站长的救世主?
最强网店ECShop发新版 众多酷炫功能给
土豆网,优酷网,爆米花等视频网站采集
DedeCms模板安装/制作概述
网上商店系统巅峰对决 ECShop vs ShopE
编程中国全站采集规则
http://www.mt86.com全站采集规则
性福联盟 一个不尊重站长的联盟
百度网络广告利润增长将会持续多久
大脚:日赚100元—揭露最新firefox欺骗
分享经验:个人网站如何月赚1万!
大脚:垃圾站超级赚钱法之二—突破“站
迅雷联盟、快车联盟收入对比
大脚:垃圾站超级赚钱法之——前言
Google Adsense的秘密 第二版
风险投资公司vc联系方式名录大全(一)
经理人必看的十个管理网站
站长学院  网页设计 建站教程 图形图象 网络编程

制定完整的网站
制定完整的网站
中国企业网站的
中国企业网站的

网站运营之怎么样来粘住你的用
网麒:网站建设创意
怎样提高网页快照更新
两种方法,教你如何通过微软正
英文网站优化细节
利用SSL加密增强FTP服务器的安
网页设计常用Javascript经典代

新闻线索

如果你有站长界人事变动、重组并购、变革技术出现,以及产品投诉等重要新闻线索,请告诉我们,我们会给予特别关注。
0631-3653338
站长中国编辑部
站长中国24小时新闻热线: 13156089008