Номера СНИЛС

Расчёт контрольной суммы СНИЛС, а так же поиск ошибок в номере

by Alexander Shpak

HTML

<link rel="stylesheet" href="http://getbootstrap.com/2.3.2/assets/css/bootstrap.css">
<div class="container">
    <div class="row">
        <div id="main" class="span6 offset3">
            <form id="enterSnils" class="form-search well">
                <legend>Поиск ошибок в номере СНИЛС (0.5.2)</legend>
                <div id="formMain">
                    <div id="alertDiv">
                        <!-- -->
                    </div>
                    <div class="input-prepend input-append"> <span class="add-on"><i class="icon-search"></i></span>

                        <input class="input-xlarge" id="appendedPrependedInput" type="text" placeholder="123-456-789 00" autofocus>
                        <button class="btn btn-primary" type="submit">Поиск ошибок</button>
                    </div>
                </div>
            </form>
        </div>
    </div>
</div>

CSS

body {
    padding-top: 5px;
}

JavaScript

$(document).ready(function () {
    // Замена цифры на b в числе a в позиции i
    function changeDigit(a, b, i) {
        function st10(n) {
            var b = 1;
            for (var i = 1; i < n; i++) {
                b *= 10;
            }
            return b;
        }
        return (((a / st10(i + 2) | 0) * 10) + b) * st10(i + 1) + (a % st10(i + 1));
    }
    // Подсчёт контрольного числа
    // Возврат INT


    function calcControlSummSnils(snils) {
        // Проверка суммы


        function checkSumm(s) {
            if (s < 10) {
                return "0" + s;
            }
            if (s < 100) {
                return s;
            }
            if (s === 100 || s === 101) {
                return "00";
            }
            if (s > 101) {
                return checkSumm(s % 101);
            }
        }
        // Расчёт суммы
        var summ = 0;
        for (var i = 0; i < 9; i++) {
            summ += (9 - i) * parseInt(snils[i]);
        }
        console.log(summ);
        return checkSumm(summ);
    }
    // Перевод массива в строку


    function arr2str(arr) {
        var str = "";
        for (var i = 0; i < arr.length; i++) {
            str += arr[i];
        }
        return str;
    }
    // Убирает из строки лишние символы - возврат массива цифр


    function validateSnils(str) {
        var digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
        var correctStr = [];
        for (var i = 0; i < str.length; i++) {
            if (str[i] in digits) {
                correctStr.push(parseInt(str[i]));
            }
        }
        //console.log(correctStr);
        return arr2str(correctStr);
    }
    // Проверка на совпадание контрольной суммы


    function checkSnils(snils) {
        if (parseInt(calcControlSummSnils(snils.substring(0, 9))) === parseInt(snils.substring(9, 11))) {
            return true;
        } else {
            return false;
        }
    }
    // 


    function showAlert(str, type) {
       ...