/*统一社会代码证验证*/
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