gosnomer 0.0.9
Исправление ручного ввода автомобильных номеров РФ
License: MIT
Requires Python: >=3.6

# 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
```