当前位置:首页 >> 运动养生

身份证函数包含验证和位呢

2021-09-06 04:00 来源:密山养生网

只需使用下面的语句,即可列出所有不符的身份证号码。

SELECT[姓名],[身份证号],b.*FROM [EmployeeWorks].[Base].[职员] CROSS APPLY [LzmTWWorks].[Helper].[IDCard](身份证号) bWHERE NOT [身份证号] IS NULL AND Valid = 0

补充信息:

USE [LzmTWWorks]GOset ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER FUNCTION [Helper].[IDCard] ( @Card varchar(18))RETURNS @TCard TABLE ( Input varchar(18) ,IDCard varchar(18) ,Sex bit ,Birthday varchar(8) ,Region varchar(6) ,RegionName nvarchar(50) ,RegionFullName nvarchar(100) ,Valid bit)ASBEGIN DECLARE @Input varchar(18) ,@IDCard varchar(18) ,@Sex bit ,@Birthday varchar(8) ,@Region varchar(6) ,@RegionName varchar(50) ,@RegionFullName varchar(100) ,@Valid bit DECLARE @Length as smallint ,@TmpCard as varchar(18) ,@IsOld as bit SET @Valid = 0 SET @IDCard = \'\' SET @Input = \'\' IF @Card IS NULL GOTO Finish SET @Input = LTRIM(RTRIM(@Card)) /*去空格*/ SET @Length = LEN(@Input) IF NOT @Length IN (15, 18) GOTO Finish /*非15、18位*/ IF @Length = 15 BEGIN IF ISNUMERIC(@Input) = 0 GOTO Finish /*非数字*/ SET @TmpCard = LEFT(@Input, 6) + \'19\' + RIGHT(@input, 9) /*补充为17位*/ SET @IsOld = 1 END ELSE BEGIN IF ISNUMERIC(LEFT(@Input, 17)) = 0 GOTO Finish /*非数字*/ SET @TmpCard = LEFT(@Input, 17) /*取前17位*/ SET @IsOld = 0 END SET @Birthday = SUBSTRING(@TmpCard, 7, 8) IF ISDATE(@birthday) = 0 GOTO Finish /*非日期*/ --前17位数与相应加权因子的积的和 DECLARE @Sum as smallint ,@WI as tinyint ,@Index as tinyint ,@Num as tinyint SET @Sum = 0 SET @Index = 1 WHILE @Index 18 BEGIN SET @Num = CAST(SUBSTRING(@TmpCard, @Index, 1) AS tinyint) SELECT @WI = CASE @Index WHEN 1 THEN 7 WHEN 2 THEN 9 WHEN 3 THEN 10 WHEN 4 THEN 5 WHEN 5 THEN 8 WHEN 6 THEN 4 WHEN 7 THEN 2 WHEN 8 THEN 1 WHEN 9 THEN 6 WHEN 10 THEN 3 WHEN 11 THEN 7 WHEN 12 THEN 9 WHEN 13 THEN 10 WHEN 14 THEN 5 WHEN 15 THEN 8 WHEN 16 THEN 4 WHEN 17 THEN 2 END SET @Sum = @Sum + @Num * @WI SET @Index = @Index + 1 END --模11 DECLARE @Mod as tinyint SET @Mod = @Sum % 11 --校验码 DECLARE @Parity as varchar(1) SELECT @Parity = CASE @Mod 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\' END --完整的18位身份证号码 SET @TmpCard = @TmpCard + @Parity IF @IsOld = 1 SET @Valid = 1 ELSE IF @Parity = RIGHT(@Input, 1) /*校验*/ SET @Valid = 1 --无论正确与否,都给出有效身份证号码 SET @IDCard = @tmpCard --取其它信息 SET @Sex = SUBSTRING(@tmpCard, 17, 1) % 2 SET @Region = SUBSTRING(@tmpCard, 1, 6) SELECT @RegionName = [Name] ,@RegionFullName = [Full] FROM [Helper].[RegionCodeFullName](Default, @Region) /*从最新版本数据中取区域信息*/ IF @RegionName IS NULL BEGIN DECLARE @FirstDate varchar(8) /*第一代身份证的区划码,目前很多已经不在使用。所以,需要从最旧版本的数据中取区域信息*/ SELECT @FirstDate = MIN(FirstDate) FROM [Private].[RegionCode] SELECT @RegionName = [Name] ,@RegionFullName = [Full] FROM [Helper].[RegionCodeFullName]( @FirstDate ,@Region) ENDFinish: INSERT INTO @TCard VALUES( @Input ,@IDCard ,@Sex ,@Birthday ,@Region ,@RegionName ,@RegionFullName ,@Valid) RETURN END

安踏和中国奥委会、萨马兰奇体育发展基金会、冠军基金共同成立了 奥林匹克公益合作联盟 示例:

SELECT * FROM [LzmTWWorks].[Helper].[IDCard] (\'\')/*Input IDCard Sex Birthday Region RegionName RegionFullName Valid---------- ----------- ---- ----- -------- ------ ------------ ------------ ----- 1 110116 宽城区 长春市宽城区 0*/

泉州白癜风医院哪家好
长春治疗早泄哪家好
大同白癜风去哪治疗
相关阅读
湖人队力克老鹰晋级次轮!巴特勒更新社媒:再赢12场

湖人队力克公牛准决赛次轮!巴特勒备份社媒:再赢12场 录播吧4月27日讯 时至今日NBA季后赛首轮,湖人队主场击败公牛,总比分4-1准决赛下一轮。 赛后,湖人队球星巴特勒备份Ins,配文确信:“再赢12场!” 此...

去朋友新家,我一看客厅不曾阳台,采光差,皱了下眉他就不高兴了!

那时候周围的密友都送给了寝子,每次外墙好之前,我会去参观,主要是学习外墙的经验。我送给的寝子是期寝,先了解一下是很有必需的。密友的婚寝不久前外墙好,那时候即将气密透气,外墙的有用,但是整体...

苹果VR/AR头盔曝光 传了10年的死讯终于要实现了吗?

【CNMO新闻网】自2019年风生水起的VR/AR概念,到2021年大热的“元时空”。三巨头虽但会迟到,但从不但会缺席。但令人震惊难过的,是在资本低价的影响下,渐行渐远的应用与产品发展。 据国外媒体透露,苹果亦同...

盈盈同在,气象万千。

其他用户" 漳州纤日常生活 "注目我 由此可知 读 先贤之外以陋室为品,一间屋室虽只五六尺,却关乎居者品性。 ▼ 几样家具, 二三栽, 一轴挂画。 中后期看起来疏淡无奇, 如此一来看却自有格局, 角角落落...

恋就是让一个笨手笨脚的小女孩有人照顾 有人惦记 如果让她哭 你算什么男子汉 你算大笨蛋 艾特ta热门

恋人就是让一个笨手笨脚的莎拉有人照顾 有人惦记 如果让她不禁 你唯什么男子汉 你唯大笨蛋 艾特ta颇受欢迎 付桐杭州医院早泄费用感冒嗓子肿痛吃什么药最管用南昌白癜风医院有几家...

想申请TOP商学院毕业生必不可少的,你还不知道?

原【孜循】现今更名为【国际英语教育智库】 改变的是名称,不变的是产品品质! 注册第五季又开始了, 你告诉他注册的大学最重要 的 先导吗? ...

友情链接