我有一个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)
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)
| 归档时间: |
|
| 查看次数: |
3025 次 |
| 最近记录: |