Проверка ИНН/КПП при вводе
Материал из BiTel WiKi
Версия от 10:25, 30 ноября 2010; Admin (Обсуждение | вклад)
Для версии 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; } }