Разделите строку на каждую нечетную и четную позицию - PullRequest
1 голос
/ 21 июня 2011

Я ничего не знаю о javascript.

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

Это псевдокод, который я написал, выводит (я думаю) TRUE для нечетных чисел (то есть «0»),

var camid;
var LN= camid.length;
var mychar = camid.charAt(LN%2);

var arr = new Array(camid);
for(var i=0; i<arr.length; i++) {
    var value = arr[i]%2;
    Alert(i =" "+value);
}

Я не уверен, что это правильно: я не верю, что это разбивает / разбивает строку на нечет(А позже даже) позиции.

Как мне это сделать?Не могли бы вы дать несколько советов?

/=================================================/

Моя цель - внедрить на веб-странице процедуру проверки для идентификатора смарт-карты.

Логика, которую я пытаюсь реализовать, заключается в следующем:

· 1) Начиная слева, умножьте все цифры в нечетных позициях на 2 и цифры в четных позициях на 1.

· 2) Если результатумножение одной цифры на 2 приводит к получению двузначного числа (скажем, «7 x 2 = 14»), складывая вместе цифры результата, чтобы получить новый однозначный результат («1 + 4 = 5»).

· 3) Добавьте все однозначные результаты вместе.

· 4) Контрольная цифра - это сумма, которую вы должны добавить к этому результату, чтобы достичь следующего наибольшего числа, кратного десяти.Например, если на шаге № 3 сумма равна 22, чтобы достичь следующего наибольшего значения, кратного 10 (то есть 30), необходимо добавить 8 к 22. Таким образом, контрольная цифра равна 8.

Это целоеидея.Поиск в Google по проверке идентификатора смарт-карты ничего не дал, и я начинаю думать, что делать это в Javascript слишком просто ...

Любые входные данные приветствуются.

Ответы [ 3 ]

2 голосов
/ 21 июня 2011

Я обнаружил, что то, что я пытаюсь сделать, называется проверкой Луна.

Я нашел алгоритм прямо здесь.время, чтобы помочь мне.Очень ценится.

2 голосов
/ 21 июня 2011
var theArray = camid.split(''); // create an array entry for each digit in camid
var size = theArray.length, i, eachValue;
for(i = 0; i < size; i++) { // iterate over each digit
  eachValue = parseInt(theArray[i], 10); // test each string digit for an integer
  if(!isNaN(eachValue)) {
    alert((eachValue % 2) ? eachValue * 2 : eachValue); // if mod outputs 1 / true (due to odd number) multiply the value by 2. If mod outputs 0 / false output value
  }
}
1 голос
/ 21 июня 2011

Похоже, что вы строите проверку Luhn.Если это так, обратите внимание, что вам нужно считать нечетное / четное число справа, а не слева от строки.

...