Генерация контрольных сумм Luhn

Можно переопределить изменять размеры поведение с CSS:

textarea
{
   resize: none;
}

или просто

<textarea style="resize: none;">TEXT TEXT TEXT</textarea>

свойства Valid: оба, горизонтальные, вертикальные, ни один

12
задан Alix Axel 14 September 2009 в 12:01
поделиться

1 ответ

Редактировать : Извините, теперь я понимаю, что вы уже получили почти весь мой ответ, вы только что неправильно определили, какой коэффициент использовать для какой цифры.

Теперь весь мой ответ можно можно резюмировать одним предложением:

У вас есть обратный множитель, вы умножаете неправильные цифры на 2 в зависимости от длины числа.


Взгляните на статью в Википедии о Luhn алгоритм .

Причина, по которой ваша контрольная сумма неверна в половине случаев, заключается в том, что с вашими проверками, в половине случаев ваш номер имеет нечетное количество цифр, а затем вы удваиваете неправильную цифру.

Для 37283, когда считая справа, вы получите следующую последовательность чисел:

  3 * 1 =  3             3
  8 * 2 = 16 --> 1 + 6 = 7
  2 * 1 =  2             2
  7 * 2 = 14 --> 1 + 4 = 5
+ 3 * 1 =  3             3
=                       20

Алгоритм требует, чтобы вы суммировали отдельные цифры исходного числа и отдельные цифры произведения этих "каждые две цифры справа ".

Итак, справа вы суммируете 3 + (1 + 6) + 2 + (1 + 4) + 3, что дает вам 20.

Если число вы закончите с оканчивается на ноль, что соответствует 20, число действительное.

Теперь ваш вопрос намекает на то, что вы хотите знать, как сгенерировать контрольную сумму, ну, это просто, сделайте следующее:

  1. Добавьте дополнительный ноль, поэтому ваше число меняется от xyxyxyxy до xyxyxyxy0
  2. Вычислите контрольную сумму luhn для нового числа
  3. Возьмите сумму, модуль 10, так что вы получите одну цифру от 0 до 10
  4. Если цифра 0 , поздравляю, ваша контрольная сумма была равна нулю
  5. В противном случае вычислите 10-значное, чтобы получить то, что вам нужно для последней цифры, вместо этого нуля

Пример: число 12345

  1. Привязка к нулю: 123450
  2. Вычислить контрольную сумму luhn для 123450, в результате получится

     0 5 4 3 2 1что дает 

     0 5 4 3 2 1
    1 2 1 2 1 2 <- коэффициент
    0 10 4 6 2 2 <- продукт
    0 1 0 4 6 2 2 <- суммируйте их до: 0 + 1 + 0 + 4 + 6 + 2 + 2 = 15
    
  3. Возьмите сумму (15), модуль 10, которая дает вам 5

  4. Цифра (5), не равна нулю
  5. Вычислите 10-5, что даст вам 5, последняя цифра должна быть 5.

] Итак, результат - 123455.

9
ответ дан 2 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: