Проверка ИНН/КПП при вводе

Материал из BiTel WiKi

Перейти к: навигация, поиск

Для версии 5.1.

Проверяет правильность ИНН и КПП параметра договора. Для ИНН оценивает списковый параметр Форма собственности, который может принимать значение ИП. Скрипт обрабатывает событий Перед изменением параметра договора.

import bitel.billing.server.contract.bean.*;
 
// коды параметров ИНН и КПП
int INN_PARAM_ID = 4;
int KPP_PARAM_ID = 5;
 
// код параметра "Форма собственности" и значения "ИП"
int PROPERTY_TYPE_PARAM_ID = 16;
int PROPERTY_TYPE_VALUE_IP = 3;
 
ContractManager cm = new ContractManager( con );
ContractParameterManager cpm = new ContractParameterManager( con );
 
int cid = event.getContractId();
int paramId = event.getParamId();
Object value = event.getValue();
 
if( paramId != INN_PARAM_ID && paramId != KPP_PARAM_ID )
{
	return;
}
 
Integer propertyType = cpm.getListParam( cid, PROPERTY_TYPE_PARAM_ID );
if( propertyType == null )
{
	event.setError( "Не установлена форма собственности!" );
	return;
} 
 
int innLength = 10;
if( propertyType == PROPERTY_TYPE_VALUE_IP )
{
	innLength = 12;
}
 
int mult(String s, int[] c) {
	int len = s.length();
	if (len > c.length)
		len = c.length;
	int summ = 0;
	for (int j = 0; j < len; j++) {
		if (!Character.isDigit(s.charAt(j)))
			return -255;
		summ += c[j] * ((int) s.charAt(j) - (int) '0');
	}
	return summ;
}
 
boolean INN(String inn) {
	if (inn == null)
		return false;
	if (inn.length() == 10)
		return (char) ((int) '0' + mult(inn, new int[] { 2, 4, 10, 3, 5, 9,
				4, 6, 8 }) % 11 % 10) == inn.charAt(9);
	if (inn.length() == 12)
		return ((char) ((int) '0' + mult(inn, new int[] { 7, 2, 4, 10, 3,
				5, 9, 4, 6, 8 }) % 11 % 10) == inn.charAt(10))
				&& ((char) ((int) '0' + mult(inn, new int[] { 3, 7, 2, 4,
						10, 3, 5, 9, 4, 6, 8 }) % 11 % 10) == inn
						.charAt(11));
	return false;
}
 
if( paramId == INN_PARAM_ID )
{
   if( event.getValue().equals("") )
   {
		return;
	}
 
   if( !INN( event.getValue() ) ) 
   {
      event.setError( "Неправильный ИНН" );
      return;
   }
 
	if( event.getValue().length()  != innLength )
	{
		event.setError( "Длина ИНН должна быть " + innLength );
       return;
	}
}
 
if( paramId == KPP_PARAM_ID )
{
   if( event.getValue().equals("") )
   {
		return;
	}
 
	if( propertyType == PROPERTY_TYPE_VALUE_IP )
	{
		event.setError( "Запрещена установка КПП для ИП" );
       return;
	}
 
	if( event.getValue().length()  != 9 )
	{
		event.setError( "Длина КПП должна быть 9" );
       return;
	}
}
Личные инструменты