Номера СНИЛС

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

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) {
    $("#alertDiv").remove();
    $("#formMain").prepend("<div id=\"alertDiv\"></div>");
    $("#alertDiv").append("<div class=\"alert alert-" + type + "\"><button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button><strong>Внимание! </strong>" + str + "</div>");
  }
  // поиск корректных...