我需要编写一个存储过程或函数来验证 EAN13 代码在 SQL Server 中的插入。
谁能帮我?
我需要编写一个存储过程或函数来验证 EAN13 代码在 SQL Server 中的插入。
谁能帮我?
解决,
我创建了一个验证函数:
CREATE FUNCTION [sp_ean](@Ean varchar(max)) RETURNS INT AS
开始
声明@Factor INT
声明 @Sum INT
声明@Len INT
声明@CC INT
声明@CA INT
声明@Result NVARCHAR(MAX)
SET @Len = LEN(@Ean)
SET @Sum = 0
设置@因子 = 3
如果 @Len = 14 或 @Len = 13 或 @Len = 12 或 @Len = 8
开始
而@Len > 0
开始
如果@Len 13
开始
SET @Sum = @Sum + SUBSTRING(@Ean,@Len,1) * @Factor
SET @Factor = 4 - @Factor
结尾
设置@Len = @Len - 1
结尾
SET @CC = ((1000 - @Sum) % 10)
SET @CA = SUBSTRING(@Ean,LEN(@Ean),1)
如果@CC = @CA
开始
设置@结果 = 0
结尾
别的
开始
设置@Result = 1
结尾
结尾
别的
开始
设置@Result = 1
结尾
返回(@Result)
结尾
结果: 0为真或1为假
谢谢!
也许你会发现这样的东西更干净。它处理可变长度输入,并且还具有可用作检查约束的优点,正如Joe Celko所指出的那样。
CASE WHEN CAST(SUBSTRING(REVERSE(ean), 1, 1) AS INTEGER) =
10 - (
3 * CAST(SUBSTRING(REVERSE(ean) + '000000', 2, 1)) AS INT)
1 * CAST(SUBSTRING(REVERSE(ean) + '000000', 3, 1)) AS INT)
3 * CAST(SUBSTRING(REVERSE(ean) + '000000', 4, 1)) AS INT)
1 * CAST(SUBSTRING(REVERSE(ean) + '000000', 5, 1)) AS INT)
3 * CAST(SUBSTRING(REVERSE(ean) + '000000', 6, 1)) AS INT)
1 * CAST(SUBSTRING(REVERSE(ean) + '000000', 7, 1)) AS INT)
3 * CAST(SUBSTRING(REVERSE(ean) + '000000', 8, 1)) AS INT)
1 * CAST(SUBSTRING(REVERSE(ean) + '000000', 9, 1)) AS INT)
3 * CAST(SUBSTRING(REVERSE(ean) + '000000', 10, 1)) AS INT)
1 * CAST(SUBSTRING(REVERSE(ean) + '000000', 11, 1)) AS INT)
3 * CAST(SUBSTRING(REVERSE(ean) + '000000', 12, 1)) AS INT)
1 * CAST(SUBSTRING(REVERSE(ean) + '000000', 13, 1)) AS INT)
3 * CAST(SUBSTRING(REVERSE(ean) + '000000', 14, 1)) AS INT)
) % 10
THEN 1 ELSE 0 END