255 lines
7.1 KiB
JavaScript
Executable File
255 lines
7.1 KiB
JavaScript
Executable File
function validateBik(bik, error) {
|
||
var result = false;
|
||
if (typeof bik === 'number') {
|
||
bik = bik.toString();
|
||
} else if (typeof bik !== 'string') {
|
||
bik = '';
|
||
}
|
||
if (!bik.length) {
|
||
error.code = 1;
|
||
error.message = 'БИК пуст';
|
||
} else if (/[^0-9]/.test(bik)) {
|
||
error.code = 2;
|
||
error.message = 'БИК может состоять только из цифр';
|
||
} else if (bik.length !== 9) {
|
||
error.code = 3;
|
||
error.message = 'БИК может состоять только из 9 цифр';
|
||
} else {
|
||
result = true;
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function validateInn(inn, error) {
|
||
var result = false;
|
||
if (typeof inn === 'number') {
|
||
inn = inn.toString();
|
||
} else if (typeof inn !== 'string') {
|
||
inn = '';
|
||
}
|
||
if (!inn.length) {
|
||
error.code = 1;
|
||
error.message = 'ИНН пуст';
|
||
} else if (/[^0-9]/.test(inn)) {
|
||
error.code = 2;
|
||
error.message = 'ИНН может состоять только из цифр';
|
||
} else if ([10, 12].indexOf(inn.length) === -1) {
|
||
error.code = 3;
|
||
error.message = 'ИНН может состоять только из 10 или 12 цифр';
|
||
} else {
|
||
var checkDigit = function (inn, coefficients) {
|
||
var n = 0;
|
||
for (var i in coefficients) {
|
||
n += coefficients[i] * inn[i];
|
||
}
|
||
return parseInt(n % 11 % 10);
|
||
};
|
||
switch (inn.length) {
|
||
case 10:
|
||
var n10 = checkDigit(inn, [2, 4, 10, 3, 5, 9, 4, 6, 8]);
|
||
if (n10 === parseInt(inn[9])) {
|
||
result = true;
|
||
}
|
||
break;
|
||
case 12:
|
||
var n11 = checkDigit(inn, [7, 2, 4, 10, 3, 5, 9, 4, 6, 8]);
|
||
var n12 = checkDigit(inn, [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8]);
|
||
if ((n11 === parseInt(inn[10])) && (n12 === parseInt(inn[11]))) {
|
||
result = true;
|
||
}
|
||
break;
|
||
}
|
||
if (!result) {
|
||
error.code = 4;
|
||
error.message = 'Неправильное контрольное число';
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function validateKpp(kpp, error) {
|
||
var result = false;
|
||
if (typeof kpp === 'number') {
|
||
kpp = kpp.toString();
|
||
} else if (typeof kpp !== 'string') {
|
||
kpp = '';
|
||
}
|
||
if (!kpp.length) {
|
||
error.code = 1;
|
||
error.message = 'КПП пуст';
|
||
} else if (kpp.length !== 9) {
|
||
error.code = 2;
|
||
error.message = 'КПП может состоять только из 9 знаков (цифр или заглавных букв латинского алфавита от A до Z)';
|
||
} else if (!/^[0-9]{4}[0-9A-Z]{2}[0-9]{3}$/.test(kpp)) {
|
||
error.code = 3;
|
||
error.message = 'Неправильный формат КПП';
|
||
} else {
|
||
result = true;
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function validateKs(ks, bik, error) {
|
||
var result = false;
|
||
if (validateBik(bik, error)) {
|
||
if (typeof ks === 'number') {
|
||
ks = ks.toString();
|
||
} else if (typeof ks !== 'string') {
|
||
ks = '';
|
||
}
|
||
if (!ks.length) {
|
||
error.code = 1;
|
||
error.message = 'К/С пуст';
|
||
} else if (/[^0-9]/.test(ks)) {
|
||
error.code = 2;
|
||
error.message = 'К/С может состоять только из цифр';
|
||
} else if (ks.length !== 20) {
|
||
error.code = 3;
|
||
error.message = 'К/С может состоять только из 20 цифр';
|
||
} else {
|
||
var bikKs = '0' + bik.toString().slice(4, 6) + ks;
|
||
var checksum = 0;
|
||
var coefficients = [7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1];
|
||
for (var i in coefficients) {
|
||
checksum += coefficients[i] * (bikKs[i] % 10);
|
||
}
|
||
if (checksum % 10 === 0) {
|
||
result = true;
|
||
} else {
|
||
error.code = 4;
|
||
error.message = 'Неправильное контрольное число';
|
||
}
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function validateOgrn(ogrn, error) {
|
||
var result = false;
|
||
if (typeof ogrn === 'number') {
|
||
ogrn = ogrn.toString();
|
||
} else if (typeof ogrn !== 'string') {
|
||
ogrn = '';
|
||
}
|
||
if (!ogrn.length) {
|
||
error.code = 1;
|
||
error.message = 'ОГРН пуст';
|
||
} else if (/[^0-9]/.test(ogrn)) {
|
||
error.code = 2;
|
||
error.message = 'ОГРН может состоять только из цифр';
|
||
} else if (ogrn.length !== 13) {
|
||
error.code = 3;
|
||
error.message = 'ОГРН может состоять только из 13 цифр';
|
||
} else {
|
||
var n13 = parseInt((parseInt(ogrn.slice(0, -1)) % 11).toString().slice(-1));
|
||
if (n13 === parseInt(ogrn[12])) {
|
||
result = true;
|
||
} else {
|
||
error.code = 4;
|
||
error.message = 'Неправильное контрольное число';
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function validateOgrnip(ogrnip, error) {
|
||
var result = false;
|
||
if (typeof ogrnip === 'number') {
|
||
ogrnip = ogrnip.toString();
|
||
} else if (typeof ogrnip !== 'string') {
|
||
ogrnip = '';
|
||
}
|
||
if (!ogrnip.length) {
|
||
error.code = 1;
|
||
error.message = 'ОГРНИП пуст';
|
||
} else if (/[^0-9]/.test(ogrnip)) {
|
||
error.code = 2;
|
||
error.message = 'ОГРНИП может состоять только из цифр';
|
||
} else if (ogrnip.length !== 15) {
|
||
error.code = 3;
|
||
error.message = 'ОГРНИП может состоять только из 15 цифр';
|
||
} else {
|
||
var n15 = parseInt((parseInt(ogrnip.slice(0, -1)) % 13).toString().slice(-1));
|
||
if (n15 === parseInt(ogrnip[14])) {
|
||
result = true;
|
||
} else {
|
||
error.code = 4;
|
||
error.message = 'Неправильное контрольное число';
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function validateRs(rs, bik, error) {
|
||
var result = false;
|
||
if (validateBik(bik, error)) {
|
||
if (typeof rs === 'number') {
|
||
rs = rs.toString();
|
||
} else if (typeof rs !== 'string') {
|
||
rs = '';
|
||
}
|
||
if (!rs.length) {
|
||
error.code = 1;
|
||
error.message = 'Р/С пуст';
|
||
} else if (/[^0-9]/.test(rs)) {
|
||
error.code = 2;
|
||
error.message = 'Р/С может состоять только из цифр';
|
||
} else if (rs.length !== 20) {
|
||
error.code = 3;
|
||
error.message = 'Р/С может состоять только из 20 цифр';
|
||
} else {
|
||
var bikRs = bik.toString().slice(-3) + rs;
|
||
var checksum = 0;
|
||
var coefficients = [7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1];
|
||
for (var i in coefficients) {
|
||
checksum += coefficients[i] * (bikRs[i] % 10);
|
||
}
|
||
if (checksum % 10 === 0) {
|
||
result = true;
|
||
} else {
|
||
error.code = 4;
|
||
error.message = 'Неправильное контрольное число';
|
||
}
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function validateSnils(snils, error) {
|
||
var result = false;
|
||
if (typeof snils === 'number') {
|
||
snils = snils.toString();
|
||
} else if (typeof snils !== 'string') {
|
||
snils = '';
|
||
}
|
||
if (!snils.length) {
|
||
error.code = 1;
|
||
error.message = 'СНИЛС пуст';
|
||
} else if (/[^0-9]/.test(snils)) {
|
||
error.code = 2;
|
||
error.message = 'СНИЛС может состоять только из цифр';
|
||
} else if (snils.length !== 11) {
|
||
error.code = 3;
|
||
error.message = 'СНИЛС может состоять только из 11 цифр';
|
||
} else {
|
||
var sum = 0;
|
||
for (var i = 0; i < 9; i++) {
|
||
sum += parseInt(snils[i]) * (9 - i);
|
||
}
|
||
var checkDigit = 0;
|
||
if (sum < 100) {
|
||
checkDigit = sum;
|
||
} else if (sum > 101) {
|
||
checkDigit = parseInt(sum % 101);
|
||
if (checkDigit === 100) {
|
||
checkDigit = 0;
|
||
}
|
||
}
|
||
if (checkDigit === parseInt(snils.slice(-2))) {
|
||
result = true;
|
||
} else {
|
||
error.code = 4;
|
||
error.message = 'Неправильное контрольное число';
|
||
}
|
||
}
|
||
return resu |