forum.bitel.ru
http://forum.bitel.ru/

Скрипт предобработки, нормализация номера. E.164
http://forum.bitel.ru/viewtopic.php?f=6&t=6148
Страница 1 из 1

Автор:  Xo4yxa [ 22 ноя 2011, 17:08 ]
Заголовок сообщения:  Скрипт предобработки, нормализация номера. E.164

Здравствйте, коллеги.
сделал я себе нормализацию номера, он даже работает.
Но так-как я не программер хотел попросить посмотреть и быть может помочь оптимизировать. :?:

Код:
import bitel.billing.server.radius.*;
import java.util.regex.*;

callingStationId = RadiusStandartAttributes.Calling_Station_Id;
calledStationId = RadiusStandartAttributes.Called_Station_Id;
username = RadiusStandartAttributes.User_Name;

if (callingStationId == null ) { String callingStationId = "78120000000"; };

//Матчим и заменяем DID
String DID = request.getStringAttribute(calledStationId).replaceFirst("^8(\\d{10})$","7$1");
if (DID != request.getStringAttribute(calledStationId)) { request.setStringAttribute(calledStationId, DID); };
String DID = request.getStringAttribute(calledStationId).replaceFirst("^(\\d{10})$","7$1");
if (DID != request.getStringAttribute(calledStationId)) { request.setStringAttribute(calledStationId, DID); };
// Если это входящий короткий - приводим его к требуемому формату
String DID = request.getStringAttribute(calledStationId).replaceFirst("^777(\\d)$","7812000000$1");
if (DID != request.getStringAttribute(calledStationId)) { request.setStringAttribute(calledStationId, DID); };
//Матчим и заменяем ANI
String ANI = request.getStringAttribute(callingStationId).replaceFirst("^8(\\d{10})$","7$1");
if (ANI != request.getStringAttribute(callingStationId)) { request.setStringAttribute(callingStationId, ANI); };
String ANI = request.getStringAttribute(callingStationId).replaceFirst("^(\\d{10})$","7$1");
if (ANI != request.getStringAttribute(callingStationId)) { request.setStringAttribute(callingStationId, ANI); };
String ANI = request.getStringAttribute(callingStationId).replaceFirst("^(\\d{3})$","78120000$1");
if (ANI != request.getStringAttribute(callingStationId)) { request.setStringAttribute(callingStationId, ANI); };
String ANI = request.getStringAttribute(callingStationId).replaceFirst("^(\\d{4})$","7812000$1");
if (ANI != request.getStringAttribute(callingStationId)) { request.setStringAttribute(callingStationId, ANI); };
//Матчим и заменяем То по чему иногда авторизуем
String User = request.getStringAttribute(username).replaceFirst("^8(\\d{10})$","7$1");
if (User != request.getStringAttribute(username)) { request.setStringAttribute(username, User); };
String User = request.getStringAttribute(username).replaceFirst("^(\\d{10})$","7$1");
if (User != request.getStringAttribute(username)) { request.setStringAttribute(username, User); };
String User = request.getStringAttribute(username).replaceFirst("^(\\d{3})$","78120000$1");
if (User != request.getStringAttribute(username)) { request.setStringAttribute(username, User); };
String User = request.getStringAttribute(username).replaceFirst("^(\\d{4})$","7812000$1");
if (User != request.getStringAttribute(username)) { request.setStringAttribute(username, User); };

Автор:  Amir [ 22 ноя 2011, 17:26 ]
Заголовок сообщения:  Re: Скрипт предобработки, нормализация номера. E.164

Лучше один раз получить getStringAttribute( ) и один раз в конце установить setStringAttribute( ).
И new String( "asd ) != "asd", нужно проверять методом equals - new String( "asd" ).equals( "asd" ) == true.

Автор:  Xo4yxa [ 29 ноя 2011, 14:17 ]
Заголовок сообщения:  Re: Скрипт предобработки, нормализация номера. E.164

Amir писал(а):
Лучше один раз получить getStringAttribute( ) и один раз в конце установить setStringAttribute( ).
И new String( "asd ) != "asd", нужно проверять методом equals - new String( "asd" ).equals( "asd" ) == true.


Ну яж сказал что я ни разу не программер, и близко не стою. Если не сложно - покажите как это будет выглядить.
И еще столкнулся с проблемой - не всегда есть переменная callingStationID - т.е. иногда она не приходит с потока, как проверять на ее отсутствие? и если что прировнять к какойнибудь другой? Я попробовал сделать так:

Код:
if (callingStationId == null ) { String callingStationId = "78120000000"; };

не работает, вопрос как это сделать правильно?

Автор:  Amir [ 06 дек 2011, 19:46 ]
Заголовок сообщения:  Re: Скрипт предобработки, нормализация номера. E.164

Примерно так:
Код:
import bitel.billing.server.radius.*;
import java.util.regex.*;

String calledStationId = request.getStringAttribute( RadiusStandartAttributes.Called_Station_Id );
//Матчим и заменяем DID
calledStationId = calledStationId.replaceFirst("^8(\\d{10})$","7$1");
calledStationId = calledStationId.replaceFirst("^(\\d{10})$","7$1");
// Если это входящий короткий - приводим его к требуемому формату
calledStationId = calledStationId.replaceFirst("^777(\\d)$","7812000000$1");

String callingStationId = request.getStringAttribute( RadiusStandartAttributes.Calling_Station_Id );
if (callingStationId == null ) { callingStationId = "78120000000"; };
//Матчим и заменяем ANI
callingStationId = callingStationId.replaceFirst("^8(\\d{10})$","7$1");
callingStationId = callingStationId.replaceFirst("^(\\d{10})$","7$1");
callingStationId = callingStationId.replaceFirst("^(\\d{3})$","78120000$1");
callingStationId = callingStationId.replaceFirst("^(\\d{4})$","7812000$1");

String username = request.getStringAttribute( RadiusStandartAttributes.User_Name );
//Матчим и заменяем То по чему иногда авторизуем
username = username.replaceFirst("^8(\\d{10})$","7$1");
username = username.replaceFirst("^(\\d{10})$","7$1");
username = username.replaceFirst("^(\\d{3})$","78120000$1");
username = username.replaceFirst("^(\\d{4})$","7812000$1");

request.setStringAttribute( RadiusStandartAttributes.Called_Station_Id, calledStationId );
request.setStringAttribute( RadiusStandartAttributes.Calling_Station_Id, callingStationId );
request.setStringAttribute( RadiusStandartAttributes.User_Name, username );

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/