Skip to content

Instantly share code, notes, and snippets.

@Aleksandr-ru
Last active November 26, 2021 22:18
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save Aleksandr-ru/c9cb1b28bf0acb6578464bd3006a31fe to your computer and use it in GitHub Desktop.
Save Aleksandr-ru/c9cb1b28bf0acb6578464bd3006a31fe to your computer and use it in GitHub Desktop.
Проверка контрольной суммы ИНН, СНИЛС, ОГРН, ОГРНИП
// проверка ИНН
function isInnValid(inn){
inn = String(inn).replace(/[^0-9]+/g, '').split('');
if ( inn.length == 10 ) {
return inn[9] == String(((
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) % 10);
}
else if ( inn.length == 12 ) {
return inn[10] == String(((
7*inn[0] + 2*inn[1] + 4*inn[2] +
10*inn[3] + 3*inn[4] + 5*inn[5] +
9*inn[6] + 4*inn[7] + 6*inn[8] +
8*inn[9]
) % 11) % 10) && inn[11] == String(((
3*inn[0] + 7*inn[1] + 2*inn[2] +
4*inn[3] + 10*inn[4] + 3*inn[5] +
5*inn[6] + 9*inn[7] + 4*inn[8] +
6*inn[9] + 8*inn[10]
) % 11) % 10);
}
return false;
}
// проверка СНИЛС
function isGpsValid(gps){
gps = String(gps).replace(/[^0-9]+/g, '');
if( gps.length == 11 ) {
var checksum = 0;
for( var i = 0; i < 9; i++ ) {
checksum += parseInt(gps.charAt(i)) * (9 - i);
}
if( checksum > 101 ) {
checksum = checksum % 101;
}
if( checksum == 100 || checksum == 101 ) {
checksum = 0;
}
return checksum == parseInt(gps.substr(9));
}
return false;
}
// проверка ОГРН и ОГРНИП
function isOgrnValid(ogrn) {
ogrn = String(ogrn).replace(/[^0-9]+/g, '');
if(ogrn.length == 13) {
// ОГРН
return ogrn[12] == (parseInt(ogrn.slice(0, -1)) % 11).toString().slice(-1);
}
else if(ogrn.length == 15) {
// ОГРНИП
return ogrn[14] == (parseInt(ogrn.slice(0, -1)) % 13).toString().slice(-1);
}
return false;
}
@andrejs82git
Copy link

Добрый день!

Вот ещё можно добавить информацию по поводу определения валидности 16-значного номера полиса ОМС (обязательного медицинского страхования) .


  const checkOMS16Number = (num) => {
    const sNum = ('' + num).trim();
    if(sNum.length !== 16) return false;
    const controlNum = parseInt(sNum.substr(-1,1));
    const arrNum = Array.from(sNum.substr(0,15));
    const arrOdd = arrNum.filter( (item, i)=> (i+1) & 1);
    const arrEven = arrNum.filter( (item, i) => !((i+1) & 1));
    
    const arr2 = arrEven.join("") + (parseInt(arrOdd.join(""))*2);
    const arrSum = Array.from("" + arr2).reduce((acc, item) => acc + parseInt(item), 0);
    const lastNumber = (""+arrSum).substr(-1);
    const controlNumResult = lastNumber == 0 ? lastNumber : 10 - lastNumber;
    return controlNum == controlNumResult;
  }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment