统一社会信用代码验证函数,忘了从哪里找的了,没准你也会用到。

微信图片_20200709170918.png

/*统一社会代码证验证*/

ALTER FUNCTION [dbo].[FN_CODS]
(

@SocialUniCode VARCHAR(18)

)
RETURNS INT
AS
BEGIN

  DECLARE @NewScialUnicCode VARCHAR(18),@AreID INT 
  SET @NewScialUnicCode=UPPER(@SocialUniCode)
  IF LEN(@NewScialUnicCode)!=18 RETURN 0
  IF CHARINDEX('I',@NewScialUnicCode)>0  RETURN 0
  IF CHARINDEX('O',@NewScialUnicCode)>0  RETURN 0
  IF CHARINDEX('Z',@NewScialUnicCode)>0  RETURN 0
  IF CHARINDEX('S',@NewScialUnicCode)>0  RETURN 0
  IF CHARINDEX('V',@NewScialUnicCode)>0  RETURN 0
  IF ISNUMERIC(SUBSTRING(@NewScialUnicCode,3,6))=0
  BEGIN 
    RETURN 0
  END
  DECLARE @Alpha TABLE  
  (
    [Key] CHAR(1),
    Value TINYINT
  )
  DECLARE @i TINYINT ,@j TINYINT,@Value TINYINT,@sum INT
  SET @i=48
  SET @j=0
  WHILE (@i<90)
  BEGIN 
     IF @i IN ( 73 , 79, 90 ,83, 86) 
     BEGIN
      SET @i=@i+1
      CONTINUE
     END;
     INSERT INTO  @Alpha VALUES(CHAR(@i),@j)
     IF @i=57 SET @i=64
     SET @i=@i+1
     SET @j=@j+1
  END;
   
  --DECLARE @Factor TABLE (Ordinal TINYINT  ,W TINYINT)
  SET @i=0
  SET @sum=0
  WHILE (@i<17)
  BEGIN
     SET  @i=@i+1 
     --INSERT INTO @Factor VALUES(@i,POWER(3,@i-1)%31 )
     SELECT @Value=Value FROM @Alpha WHERE [Key]=SUBSTRING(@NewScialUnicCode,@i,1)
     SET @sum=@sum+@Value*(POWER(3,@i-1)%31)
  END
  DECLARE @CheckNumber CHAR(1)
  SET @Value=31-(@sum%31)
  SELECT @CheckNumber=[Key] FROM @Alpha WHERE Value=@Value
  IF @Value=31 SET @CheckNumber='0'
  IF SUBSTRING(@NewScialUnicCode,18,1)!=@CheckNumber
  RETURN 0
 

RETURN 1
END

发表新评论