text: // https://github.com/Kholenkov/js-data-validation/blob/master/data-validation.js
  
  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 result;
  }
  