Skip to main content

Исправление ручного ввода автомобильных номеров РФ

Project description

gosnomer

Нормализация для госномеров автомобилей и других транспортных средств РФ. Автоматическое исправление ошибок ручного ввода госномера.

  • Удаление пробелов
  • Перевод в верхний регистр
  • Перевод латиницы в кириллицу
  • Проверка допустимости символов
  • Проверка допустимости формата номера
  • Исправление ошибок в заменой нуля на букву "О" и наооборот
  • Проверка правильности трехзначного кода региона
  • Проверка, что числовые последовательности не состоят только из нулей

Использование:

def normalize(no, prefer=None) -> str: """Берет на вход государственный регистрационный номер транспортного средства с ошибками ручного ввода и возвращает исправленный госномер.

Поднимает ValueError, если в номере, подаваемом на вход, содержатся ошибки, которые
невозможно исправить.

Args:
    no (str): строка с номером, которую требуется нормализовать / исправить.
    prefer (list[str]): перечень предпочитаемых форматов в порядке предпочтения.
        Нужно для случаев, когда номера можно истолковать по-разному.
        Например, `["X999XX999", "X999XX999"]` отдаст предпочтение
        трактовке номеров, как автомобильных (тип 1). А входящая строка "о001тр98"
        будет нормализована как "О001ТР98" (формат номера автомобиля),
        а не как "0001ТР98" (формат номера мопеда).

        Если не указано, то берется первый попавшийся из подошедших форматов.

Returns:
    str: исправленная, приведенная к стандарту строка с номером.

Raises:
    ValueError: если строку не удается исправить, т.е. она содержит символы,
        которым невозможно привести в соответствие один из стандартных,
        или вся строка имеет неправильный формат.

Примеры использования:

>>> normalize ('YY1239O')
'УУ12390'

>>> normalize (12340078)
'1234ОО78'

>>> normalize ('о123оо9о9')
'О123ОО909'

>>> normalize ('000100102')
'О001ОО102'

>>> normalize ('   оо12345  ')
'ОО12345'

>>> normalize("о001тр98", ["9999XX99", "XX99XX99", "X999XX99"])
'0001ТР98'

>>> normalize ('')
Traceback (most recent call last):
...
ValueError: Недопустимый формат: ""

>>> normalize ('000000000')
Traceback (most recent call last):
...
ValueError: Номер не может содержать числовые последовательности, состоящие только из нулей

>>> normalize ('000100001')
Traceback (most recent call last):
...
ValueError: Первая цифра трехзначного региона не может быть нулем

>>> normalize ('ГН99900')
Traceback (most recent call last):
...
ValueError: Недопустимый символ: "Г"

>>> normalize ('НН01ВВ67ОО78')
Traceback (most recent call last):
...
ValueError: Недопустимый формат: "XX*9XX99**99"

>>> normalize (12345678)
Traceback (most recent call last):
...
ValueError: Недопустимый формат: "99999999"

>>> normalize("о001тр98", ["99999999"])
Traceback (most recent call last):
...
ValueError: Параметр prefer содержит недопустимые форматы: {'99999999'}

Модуль также содержит наборы ALLOWED_LETTERS, ALLOWED_NUMBERS, ALLOWED_SYMBOLS и ALLOWED_FORMATS:

>>> 'Ю' in ALLOWED_LETTERS
False

>>> 1 in ALLOWED_NUMBERS
False

>>> '1' in ALLOWED_NUMBERS
True

>>> all([x in ALLOWED_SYMBOLS for x in ALLOWED_NUMBERS])
True

>>> 'Х999ХХ99' in ALLOWED_FORMATS
True

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gosnomer-0.0.9.tar.gz (6.4 kB view hashes)

Uploaded Source

Built Distribution

gosnomer-0.0.9-py3-none-any.whl (7.3 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page