В формах ввода очень часто приходится проверять контрольные суммы для ИНН. Делается это довольно просто, достаточно сложить знаки перемноженные на коэффициенты. Правила описаны здесь.
В итоге для вычисления контрольной суммы получаем нечто подобное:
var inn = "1234567890"; //это не число, т.к. с формы мы получим строку
kontrolSumm = (2*inn[0] + 4*inn[1] + 10*inn[2] + 3*inn[3] + 5*inn[4] + 9*inn[5] + 4*inn[6] + 6*inn[7] + 8*inn[8])%11;
Во всех нормальных браузерах этот код работать будет, но только не в Internet Explorer 6 и 7 (а также в IE8 в режиме совместимости). Здесь мы обращаемся к строке как к массиву, но как выяснилось, IE6 не позволяет этого делать. Это довольно странно, т.к. во всех руководствах по JavaScript которые я видел было сказано, что строка представляет собой массив символов в кодировке Unicode.
Обойти эту неприятную особенность просто. Достаточно принудительно создать массив из строки c помощью метода .split().
var inn = "1234567890"; //это не число, т.к. с формы м получим строку
inn = inn.split('');//преобразуем в массив
kontrolSumm = (2*inn[0] + 4*inn[1] + 10*inn[2] + 3*inn[3] + 5*inn[4] + 9*inn[5] + 4*inn[6] + 6*inn[7] + 8*inn[8])%11;
Я не нашел в сети упоминаний об этом баге, так что решил написать, вдруг кому пригодится =)
Спасибо, очень полезная инфа!
Ответить
я бы еще каждый в Number(inn…) обернул для надёжности…
Ответить
Это лишнеее, т.к. если где-то будет не целое число то контрольная строка не сойдётся.
Ответить