sql server 验证身份证号码有效性

来源:互联网 发布:开淘宝店需要注意哪些 编辑:程序博客网 时间:2024/04/28 14:51

有些情况下 ,数据库里的身份证号码有很多无效数据,这时候要刷选所有有效的身份证号码数据该如何做呢?

可以建一个函数,然后直接调用即可,sql如下:

CREATE FUNCTION [dbo].[fun_IsValidID](@ID Varchar(18))
 -- Add the parameters for the stored procedure here
 RETURNS BIT
AS
BEGIN
  DECLARE @ValidFactors VARCHAR(17),
    @ValidCodes VARCHAR(11),
          @I TINYINT,
          @iTemp INT
 
  --位数不满足则为非法ID
 
  IF Len(@ID) <> 15 AND Len(@ID) <> 18
 RETURN(0);
 
  --如果是15位身份证 则只验证日期和是否数字格式
  IF LEN(@ID)=15  
    IF ISDATE('19'+SUBSTRING(@ID,7,6))=0 OR @ID NOT LIKE REPLICATE('[0-9]',15)
      RETURN(0);
    ELSE
      RETURN(1);
 
  /*18位身份证 验证日期 校验位 */
 
    --验证日期和前17位是否数字格式
  IF ISDATE(SUBSTRING(@ID,7,8))=0 OR LEFT(@ID,17) NOT LIKE REPLICATE('[0-9]',17)
      RETURN(0);
 
 --验证校验位开始
  SELECT @ValidFactors='79A584216379A5842',
   @ValidCodes='10X98765432',
      @I=1,@iTemp=0
 
  WHILE @i<18
  BEGIN      
     SELECT
       @iTemp=@iTemp+CAST(SUBSTRING(@ID,@i,1) AS INT)*(CASE SUBSTRING(@validFactors,@i,1) WHEN 'A' THEN 10 ELSE SUBSTRING(@ValidFactors,@i,1) END)
       ,@i=@i+1
  END
 
  IF SUBSTRING(@ValidCodes,@iTemp%11+1,1)=RIGHT(@ID,1)
    RETURN(1);
  ELSE
    RETURN(0);
   
  RETURN NULL;
END

GO

0 0
原创粉丝点击