Есть ли у кого-нибудь рабочая функция, доступная для использования в Oracle с использованием PL/SQL, которая реализует алгоритм Luhn Mod 16 для генерации контрольной цифры для входного кодового номера, например, в следующем примере? 0B012722900021AC35B2
ЛОГИКА
Преобразование из HEX в десятичный эквивалент
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
Преобразуйте «двойной» в формат с основанием 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)
из вашего комментария к моему ответу. Пожалуйста, проверьте правильность моей интерпретации. - person APC   schedule 05.01.2018