T-SQL自定义函数(SQL Server 2000)

ste*_*eve 2 t-sql algorithm

我有一个15位的客户编号,我需要计算该值的校验位.为了得出校验位,我使用Excel(公式如下).

这个公式基于一个叫做Luhn算法的东西(我认为这是正确的拼写).15位客户编号存储在SQL Server 2000数据库中.

我希望能够使用T-SQL函数而不是Excel来进行此计算.有谁知道如何在SQL Server 2000数据库上使用T-SQL来完成这项工作?

Excel公式将给我一个15位数字的校验位是这样的:

=MOD(SUMPRODUCT(-MID(TEXT(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)*(MOD(ROW(INDIRECT("1:"&LEN(A2)))+LEN(A2)+1,2)+1),"00"),{1,2},1)),10)
Run Code Online (Sandbox Code Playgroud)

ste*_*eve 5

CREATE FUNCTION dbo.fnGetLuhn
(
    @Luhn VARCHAR(7999)
)
RETURNS VARCHAR(8000)
AS
BEGIN
    IF @Luhn LIKE '%[^0-9]%'
        RETURN @Luhn

    DECLARE @Index SMALLINT,
        @Multiplier TINYINT,
        @Sum INT,
        @Plus TINYINT

    SELECT  @Index = LEN(@Luhn),
        @Multiplier = 2,
        @Sum = 0

    WHILE @Index >= 1
        SELECT  @Plus = @Multiplier * CAST(SUBSTRING(@Luhn, @Index, 1) AS TINYINT),
            @Multiplier = 3 - @Multiplier,
            @Sum = @Sum + @Plus / 10 + @Plus % 10,
            @Index = @Index - 1

    RETURN  @Luhn + CASE WHEN @Sum % 10 = 0 THEN '0' ELSE CAST(10 - @Sum % 10 AS CHAR) END
END
Run Code Online (Sandbox Code Playgroud)