仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 598|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL教程之查询新身份证(18位)的校验位

[复制链接]
蒙在股里 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:30:28 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
BlackHole黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继
/*
依据〖中华国民共和国国度尺度GB11643-1999〗中有关国民身份号码的划定,国民身份号码是特性组合码,由十七位数字本体码和一名数字校验码构成。分列按次从左至右顺次为:六位数字地点码,八位数字出身日期码,三位数字按次码和一名数字校验码。

地点码暗示编码工具常住户口地点县(市、旗、区)的行政区划代码。诞辰期码暗示编码工具出身的年、月、日,个中年份用四位数字暗示,年、月、日之间不必分开符。按次码暗示统一地点码所标识的地区局限内,对同年、月、日出身的职员编定的按次号。按次码的奇数分给男性,偶数分给女性。校验码是依据后面十七位数字码,依照ISO7064:1983.MOD11-2校验码盘算出来的查验码。上面举例申明该盘算办法。

15位的身份证编码起首把出身年扩大为4位,复杂的就是增添一个19,可是这关于1900年出身的人不利用(如许的寿星未几了)

某男性国民身份号码本体码为34052419800101001,起首依照公式⑴盘算:

∑(ai×Wi)(mod11)……………………………………(1)

公式(1)中:
i----暗示号码字符从由至左包含校验码在内的地位序号;
ai----暗示第i地位上的号码字符值;
Wi----示第i地位上的加权因子,其数值根据公式Wi=2(n-1)(mod11)盘算得出。

i181716151413121110987654321

ai34052419800101001a1

Wi79105842163791058421

ai×Wi21360251616294800905002a1

依据公式(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)(mod11)=2

然后依据盘算的了局,从上面的表中查出响应的校验码,个中X暗示盘算了局为10:

∑(ai×WI)(mod11)012345678910
校验码字符值ai10X98765432
依据上表,查出盘算了局为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

when0then1when1then0when2thenXwhen3then9
when4then8when5then7when6then6when7then5
when8then4when9then3when10then2

*/

/*

以上为算法具体申明,上面是SQL的自界说函数,前往值为18位的校验码

*/
CreatefunctiongetCheckCode(@SFZHchar(18))
Returnschar(1)
As
Begin
declare@rchar(1)
declare@iint
iflen(@SFZH)18
set@r=?
else
set@i=cast(substring(@SFZH,1,1)asint)*7
+cast(substring(@SFZH,2,1)asint)*9
+cast(substring(@SFZH,3,1)asint)*10
+cast(substring(@SFZH,4,1)asint)*5
+cast(substring(@SFZH,5,1)asint)*8
+cast(substring(@SFZH,6,1)asint)*4
+cast(substring(@SFZH,7,1)asint)*2
+cast(substring(@SFZH,8,1)asint)*1
+cast(substring(@SFZH,9,1)asint)*6
+cast(substring(@SFZH,10,1)asint)*3
+cast(substring(@SFZH,11,1)asint)*7
+cast(substring(@SFZH,12,1)asint)*9
+cast(substring(@SFZH,13,1)asint)*10
+cast(substring(@SFZH,14,1)asint)*5
+cast(substring(@SFZH,15,1)asint)*8
+cast(substring(@SFZH,16,1)asint)*4
+cast(substring(@SFZH,17,1)asint)*2
set@i=@i-@i/11*11
set@r=(case@i
when0then1when1then0when2thenXwhen3then9
when4then8when5then7when6then6when7then5
when8then4when9then3when10then2else/end)
Return(@r)
End

/*Usage:
selectdbo.getcheckcode(身份证号)

*/




其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
变相怪杰 该用户已被删除
9#
发表于 2015-3-22 18:54:51 | 只看该作者
我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力
小魔女 该用户已被删除
8#
发表于 2015-3-16 02:06:53 | 只看该作者
也可谈一下你是怎么优化存储过程的?
老尸 该用户已被删除
7#
发表于 2015-3-8 13:56:05 | 只看该作者
索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。
乐观 该用户已被删除
6#
发表于 2015-2-26 10:55:11 | 只看该作者
索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。
因胸联盟 该用户已被删除
5#
发表于 2015-2-8 21:11:11 | 只看该作者
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
不帅 该用户已被删除
地板
发表于 2015-2-3 12:09:25 来自手机 | 只看该作者
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
简单生活 该用户已被删除
板凳
发表于 2015-1-25 17:31:42 | 只看该作者
财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..
再现理想 该用户已被删除
沙发
发表于 2015-1-19 15:49:50 来自手机 | 只看该作者
很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 04:25

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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