понедельник, 10 ноября 2014 г.

Проверка корректности IMEI. Алгоритм Луна.




В этом небольшом посте я приведу несколько реализаций широко известного алгоритма Луна (Luhn algorithm) на JavaScript, который используется при проверке контрольной суммы IMEI. Вверху, вы можете видеть онлайн-форму для проверки, ну а теперь собственно перейдем к реализациям.

Вариант 1.

<script language="javascript">
<!--
function luhnChk(luhn) {
    var len = luhn.length,
        mul = 0,
        prodArr = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]],
        sum = 0;
 
    while (len--) {
        sum += prodArr[mul][parseInt(luhn.charAt(len), 10)];
        mul ^= 1;
    }
 
    return sum % 10 === 0 && sum > 0;
};
;
-->
</script>

По времени выполнения - этот вариант должен быть быстрее остальных.

Вариант 2.

// takes the form field value and returns true on valid number
function valid_credit_card(value) {
  // accept only digits, dashes or spaces
 if (/[^0-9-\s]+/.test(value)) return false;
 
 // The Luhn Algorithm. It's so pretty.
 var nCheck = 0, nDigit = 0, bEven = false;
 value = value.replace(/\D/g, "");
 
 for (var n = value.length - 1; n >= 0; n--) {
  var cDigit = value.charAt(n),
     nDigit = parseInt(cDigit, 10);
 
  if (bEven) {
   if ((nDigit *= 2) > 9) nDigit -= 9;
  }
 
  nCheck += nDigit;
  bEven = !bEven;
 }
 
 return (nCheck % 10) == 0;
}

Комментариев нет :

Отправить комментарий