Проверка мобильного телефона в базе МВД Украины (IMEI)

04.10.21

Разработка - Универсальные функции

Добрый день, коллеги. Данная статья просто показывает готовый метод, при помощи которого вы сможете проверить мобильный телефон в базе МВД Украины.

В связи со спецификой работы поступила задача - нужно проверять телефоны по IMEI, и если они в розыске - бьем тревогу.

Первое, что нам необходимо, это наличие в конфигураторе КоннекторHTTP (//infostart.ru/public/709325/), это не реклама!
Это очень полезная обработка/библиотека, и я очень сильно жалею, что долго тянул время с переходом на нее ;)

Ну а тут у нас, собственно, метод, который и производит проверку, разбил метод на блоки, чтобы удобнее воспринимать информацию, код вроде бы самодокументируемый.
 

// Проверка мобильного телефона по IMEI на предмет нахождения его(телефона)
// в базе розыска МВД
//
// Параметры:
//  IMEI - Строка - IMEI код мобильного телефона. Для определения кода IMEI, записанного в памяти телефона, наберите комбинацию *#06#.
//  ОписаниеРезультата - Структура - выходной параметр. Данный параметр будет заполнен ТОЛЬКО в случае если мобильный телефон
//    находится в розыске.
//
// Возвращаемое значение:
//  Неопределено, Булево - возможны ТОЛЬКО 3(три) варианта ответа, описание вариантов ответа:
//    - Неопределено - если произошла не предвиденная(ошибка при отправке запроса, ошибка при парсинге ответа и т.д.)
//      ситуации и неудалось получить ответ;
//    - Истина - если мобильный телефон находится в розыске (также в этом случае будет заполнен параметр ОписаниеРезультата);
//    - Ложь - мобильный телефон не находится в розыске.
//
&НаСервере
Функция МобильныйТелефонНаходитсяВРозыске(Знач IMEI, ОписаниеРезультата = Неопределено)
	
	// Инициализация результата.
	Результат = Неопределено;
	
	// Создание сессии.
	Сессия = КоннекторHTTP.СоздатьСессию();
	Ответ = КоннекторHTTP.Get("https://wanted.mvs.gov.ua/searchthing/",,, Сессия);
	Если Ответ.КодСостояния <> 200 Тогда
		Возврат Результат;	
	КонецЕсли;

	// Получение идентификатора сессии.
	ИдентификаторСессии = Неопределено;
	Если Сессия.Cookies.Получить("wanted.mvs.gov.ua") = Неопределено
		Или Сессия.Cookies["wanted.mvs.gov.ua"].Получить("/") = Неопределено
		Или Сессия.Cookies["wanted.mvs.gov.ua"]["/"].Получить("PHPSESSID") = Неопределено
		Или Не Сессия.Cookies["wanted.mvs.gov.ua"]["/"]["PHPSESSID"].Свойство("Значение", ИдентификаторСессии) Тогда
		Возврат Результат;	
	КонецЕсли;
	
	// Выполнение запроса на поиск.
	
	СтруктураДанных = Новый Структура;
	СтруктураДанных.Вставить("IMEI", IMEI);
	СтруктураДанных.Вставить("sestoken", ИдентификаторСессии);
	
	Ответ = КоннекторHTTP.Post("https://wanted.mvs.gov.ua/searchthing/result/", СтруктураДанных,, Сессия);
	Если Ответ.КодСостояния <> 200 Тогда
		Возврат Результат;	
	КонецЕсли;
	
	ТелоОтвета = КоннекторHTTP.КакТекст(Ответ, КодировкаТекста.UTF8);;
	
	// Парсинг. Подготовка.
	ЧтениеHTML = Новый ЧтениеHTML;
	ЧтениеHTML.УстановитьСтроку(ТелоОтвета);
	ПостроительDOM = Новый ПостроительDOM;
	ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
	ДокументHTML.НормализоватьДокумент();

	// Парсинг. Поиск поля которое отвечает за отрицательный ответ(т.е. когда такого телефона нет в базе)
	// а значит мобильный телефон НЕ в розыске.	
	МассивЭлементовHTML = ДокументHTML.НайтиПоФильтру("
	|{
	|  ""type"": ""intersection"",
	|  ""value"": [
	|    {
	|      ""type"": ""elementname"",
	|      ""value"": {
	|        ""value"": ""div"",
	|        ""operation"": ""equals""
	|      }
	|    },
	|    {
	|      ""type"": ""hasattribute"",
	|      ""value"": {
	|        ""value"": ""id"",
	|        ""operation"": ""nameequals""
	|      }
	|    },
	|    {
	|      ""type"": ""hasattribute"",
	|      ""value"": {
	|        ""value"": ""TextNotFind"",
	|        ""operation"": ""valueequals""
	|      }
	|    }
	|  ]
	|}
	|");
	
	Если МассивЭлементовHTML.Количество() Тогда
		Результат = Ложь;
		Возврат Результат;	
	КонецЕсли;
	
	// Парсинг. Поиск полей с дополнительной информацией.
	// Если выполнение метода дошло до этого этапа то телефон с указанным IMEI есть в базе МВД и он в розыске.
	// Присваевать значение Истина в параметр Результат, будем только после удачного парсинга.
	МассивЭлементовHTML = ДокументHTML.НайтиПоФильтру("
	|{
	|  ""type"": ""intersection"",
	|  ""value"": [
	|    {
	|      ""type"": ""elementname"",
	|      ""value"": {
	|        ""value"": ""li"",
	|        ""operation"": ""equals""
	|      }
	|    },
	|    {
	|      ""type"": ""hasattribute"",
	|      ""value"": {
	|        ""value"": ""class"",
	|        ""operation"": ""nameequals""
	|      }
	|    },
	|    {
	|      ""type"": ""hasattribute"",
	|      ""value"": {
	|        ""value"": ""clearfix"",
	|        ""operation"": ""valueequals""
	|      }
	|    }
	|  ]
	|}
	|");
	
	Если МассивЭлементовHTML.Количество() Тогда
		
		ОписаниеРезультата = Новый Структура;
		ОписаниеРезультата.Вставить("ПодразделениеМВД");
		ОписаниеРезультата.Вставить("IMEI");
		ОписаниеРезультата.Вставить("Модель");
		
		Для Индекс = 0 По МассивЭлементовHTML.ВГраница() Цикл
			
			ЭлементHTML = МассивЭлементовHTML[Индекс];
			
			Если Индекс = 0 Тогда
				ОписаниеРезультата.ПодразделениеМВД = ЭлементHTML.ПоследнийДочерний.ТекстовоеСодержимое;
				Продолжить;	
			КонецЕсли;
			
			Если Индекс = 1 Тогда
				ОписаниеРезультата.IMEI = ЭлементHTML.ПоследнийДочерний.ТекстовоеСодержимое;
				Продолжить;	
			КонецЕсли;
			
			Если Индекс = 2 Тогда
				ОписаниеРезультата.Модель = ЭлементHTML.ПоследнийДочерний.ТекстовоеСодержимое;
				Продолжить;	
			КонецЕсли;
		
		КонецЦикла;
		
		Результат = Истина;
		Возврат Результат;
	КонецЕсли;

	Возврат Результат;
	
КонецФункции

 

Если будет необходимость, то пишите в комментариях или ставьте плюсики, сделаю независимую (без использования КоннекторHTTP) обработку.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    5397    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    46286    dimanich70    83    

164

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    6837    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    57339    atdonya    31    

68

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8603    ke.92@mail.ru    17    

68

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    22757    YA_418728146    8    

174
Для отправки сообщения требуется регистрация/авторизация