本文主要介绍了SQL Server 2005的身份证函数,其中包含验证和15位转18位。
具体示例代码如下:
| 以下为引用的内容: USE [LzmTWWorks] DECLARE SET @Valid = 0 IF @Card IS NULL GOTO Finish SET @Input = LTRIM(RTRIM(@Card)) /*去空格*/ IF NOT @Length IN (15, 18) GOTO Finish /*非15、18位*/ IF @Length = 15 DECLARE @Birthday varchar(8) --前17位数与相应加权因子积的和 SET @Sum = 0 WHILE @Index < 18 SELECT @WI = 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 --模11 --校验码 --完整的18位身份证号码 IF @IsOld = 1 --无论对错,都给出有效身份证号码 Finish: |
只需使用下面的语句,即可列出所有不符的身份证号码。
| 以下为引用的内容: SELECT [姓名] ,[身份证号] ,b.* FROM [EmployeeWorks].[Base].[职员] CROSS APPLY [LzmTWWorks].[Helper].[IDCard](身份证号) b WHERE NOT [身份证号] IS NULL AND Valid = 0 |
补充信息:
| 以下为引用的内容: USE [LzmTWWorks] GO set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER 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 ) AS BEGIN 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 IF @Card IS NULL GOTO Finish SET @Input = LTRIM(RTRIM(@Card)) /*去空格*/ IF NOT @Length IN (15, 18) GOTO Finish /*非15、18位*/ IF @Length = 15 SET @Birthday = SUBSTRING(@TmpCard, 7, 8) --前17位数与相应加权因子的积的和 SET @Sum = 0 WHILE @Index < 18 SELECT @WI = 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 --模11 --校验码 --完整的18位身份证号码 IF @IsOld = 1 --无论正确与否,都给出有效身份证号码 --取其它信息 SET @Region = SUBSTRING(@tmpCard, 1, 6) SELECT IF @RegionName IS NULL SELECT @FirstDate = MIN(FirstDate) Finish: |
示例:
| 以下为引用的内容: SELECT * FROM [LzmTWWorks].[Helper].[IDCard] ('110116200808080010') */ |

收藏到QQ书签