【发布时间】:2018-06-14 01:06:42
【问题描述】:
是否有人可以在 Oracle 内使用 PL/SQL 使用工作函数,该函数实现 Luhn Mod 16 算法来为输入代码生成校验位,如下例所示? 0B012722900021AC35B2
逻辑
从十六进制映射到十进制等效
0 B 0 1 2 7 2 2 9 0 0 0 2 1 A C 3 5 B 2- 变为0 11 0 1 2 7 2 2 9 0 0 0 2 1 10 12 3 5 11 2从字符串中的最后一个字符开始,向左移动每隔一个数字加倍 - 变为
0 22 0 2 2 14 2 4 9 0 0 0 2 2 10 24 3 10 11 4将“double”转换为 Base 16(十六进制)格式。如果转换导致数字输出,则保留该值。 变为:
0 16 0 2 2 E 2 4 9 0 0 0 2 2 10 18 3 A 11 4通过将任何结果值拆分为单个数字长度来减少。 变为
0 (1+6) 0 2 2 E 2 4 9 0 0 0 2 2 10 (1+8) 3 A 11 4对所有数字求和。应用从上一个计算序列返回的最后一个数值(如果当前值是 A-F,则替换步骤 1 中的数值) 变为
0 7 0 2 2 7 2 4 9 0 0 0 2 2 10 9 3 5 11 4所有 l 位数字之和为 79
(0+7+0+2+2+7+2+4+9+0+0+0+2+2+10+9+3+5+11+4)计算获得下一个 16 的倍数所需的值,在这种情况下,下一个 16 的倍数是 80,因此该值为 1
关联的校验字符是
1
谢谢李
【问题讨论】:
-
由于是十六进制,所以不太重复。
-
我已经根据您对我的回答的评论修改了
step 5)的措辞。请检查我的解释是否正确。 -
@LeeReynolds - 我付出了很多努力来帮助您解决您的问题,但您在此线程关闭之前已经放弃了它。表现不佳,
标签: oracle stored-procedures plsql luhn