- Saved searches
- Use saved searches to filter your results more quickly
- MYTEMPUSER/Russian-document-parser
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- About
- Saved searches
- Use saved searches to filter your results more quickly
- License
- ZhymabekRoman/kz-iin-validator
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- About
- Как сгенерировать корректный номер налоговой записи налогоплательщика (ИНН)?
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Распознавание ИНН, Паспорта и СНИЛС
MYTEMPUSER/Russian-document-parser
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Распознование Российских ИНН
На данный момент реализовано распознавание ИНН, на вход можно подавать файлы формата .jpg, .png и .pdf.
from Parse_INN import INN_parser file = "инн.jpg" parser = INN_parser() parser.set_image(file) print(parser.find_INN())
Есть два возможных режима работы, с использование библиотеки pyteseract (Инструкция по установке https://github.com/h/pytesseract), и с помощью кастомных нейронных сетей, по умолчанию используется tesseract. Для использования кастомной нейронной сети:
На данный момент в проекте находится обученная модель (python notebook) для задачи MNIST (точность ~99.9%), однако для печатных цифр она работает не очень хорошо. Для улучшения качества работы следует обучить модель на других данных. В целом логика работы правильная, ИНН в хорошем качестве распознаются примерно в 95% случаев (для tesseract).
About
Распознавание ИНН, Паспорта и СНИЛС
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Библиотека для проверки и извлечения данных из ИИН на Python3.
License
ZhymabekRoman/kz-iin-validator
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
kz-iin-validator — Библиотека для проверки и извлечения данных из ИИН на Python 3. ИИН — это Индивидуальный Идентификационный Номер граждан Республики Казахстан (РК) и юридических лиц РК
- Production-ready библиотека
- 100% code coverage — Библиотека полностью покрыта тестами
- Zero-depency — Не требует дополнительных зависимостей
- Базовая валидация данных ИИН, таких как дата, месяц, год
- Генератор ИИН
- Проверка целостности по хэш сумме ИИН. Алгоритм формирования ИИН регулируется Постановлением правительства РК «Об утверждении Программы перехода на единый номер физического (юридического) лица (индивидуальный идентификационный номер (бизнес-идентификационный номер) в целях создания Национальных реестров идентификационных номеров Республики Казахстан» от 11 июня 2003 года N 565 — Ссылка на источник приказа
* судя по информации утилиты Vermin
** я могу адаптировать (забэкпортить) библиотеку для более старых версии Python, но стоит ли оно? Если что дайте мне знать
- Реализовать поддержку валидации БИН
- Улучшить документация
- Static type hint using Mypy
python3 -m pip install kz-iin-validator
python3 -m pip install git+https://github.com/ZhymabekRoman/kz-iin-validator
from kz_iin_validator import safe_validate_iin, validate_iin iin = "061211600012" # use kz_iin_validator as in Golang (preferred in production) validated_iin, error = safe_validate_iin(iin) # or directly with exceptions raising: # validated_iin = validate_iin(iin) print(f"ИИН: iin>") # Print IIN owner gender: print(f"Пол: validated_iin.gender.name.upper()>") # Print IIN owner born information: print(f"День: validated_iin.born_date.day>") print(f"Месяц: validated_iin.born_date.month>") print(f"Год: validated_iin.born_date.year>") # or directly access to datetime object: # validated_iin.born_date.datetime
from kz_iin_validator import generate_iin generated_iin = generate_iin() print(generated_iin) # return generated valid IIN as string
from kz_iin_validator import extract_iin text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit - 251112401047. Aliquam vel diam ac enim consequat rhoncus 700911204362!." extracted_iin_list = extract_iin(text) print(extracted_iin_list)
About
Библиотека для проверки и извлечения данных из ИИН на Python3.
Как сгенерировать корректный номер налоговой записи налогоплательщика (ИНН)?
Подскажите, пожалуйста, как сгенерировать корректный номер налоговой записи налогоплательщика или там могут быть абсолютно произвольные цифры?
UPD:
Забыл написать, если верно понял, то цифры 4-10 генерируются в произвольном порядке от 000000 до 999999. При создании ИНН первые 4 цифры брал корректные, опираясь на список кодов\номеров, 4-10 произвольные цифры, 11-12 создавал по алгоритму. В итоге, при проверке сгенерированных номеров на сайте проверки ИНН все значения оказались корректными.
Если не прав — буду рад исправлению.
Внесу свою лепту на Python + функция проверки на валидность ИНН:
def inn_ctrl_summ(nums, type): """ Подсчет контрольной суммы """ inn_ctrl_type = < 'n2_12': [7, 2, 4, 10, 3, 5, 9, 4, 6, 8], 'n1_12': [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8], 'n1_10': [2, 4, 10, 3, 5, 9, 4, 6, 8], >n = 0 l = inn_ctrl_type[type] for i in range(0, len(l)): n += nums[i] * l[i] return n % 11 % 10 def inn_gen(l=None): """ Генерация ИНН (10 или 12 значный) На входе указывается длина номера - 10 или 12. Если ничего не указано, будет выбрана случайная длина. """ if not l: l = list((10, 12))[rnd(0, 1)] if l not in (10, 12): return None nums = [ rnd(1, 9) if x == 0 else rnd(0, 9) for x in range(0, 9 if l == 10 else 10) ] if l == 12: n2 = inn_ctrl_summ(nums, 'n2_12') nums.append(n2) n1 = inn_ctrl_summ(nums, 'n1_12') nums.append(n1) elif l == 10: n1 = inn_ctrl_summ(nums, 'n1_10') nums.append(n1) return ''.join([str(x) for x in nums]) def inn_check(inn): """ Проверка ИНН на корректность В соответствии с алгоритмом, описанным по ссылке: https://ru.wikipedia.org/wiki/Контрольное_число """ sinn = str(inn) nums = [int(x) for x in sinn] if len(sinn) == 10: n1 = inn_ctrl_summ(nums, 'n1_10') return n1 == nums[-1] elif len(sinn) == 12: n2 = inn_ctrl_summ(nums, 'n2_12') n1 = inn_ctrl_summ(nums, 'n1_12') return n2 == nums[-2] and n1 == nums[-1] else: return False
Прочтите внимательно и обратитесь к ним, ru.wikipedia.org/wiki/%D0%98%D0%B4%D0%B5%D0%BD%D1%. они вам как раз и сгенерируют, если потребуется. : ) А когда следующий раз вы захотите сгенерировать бланк паспорта гражданина России, то сразу обращайтесь в УФМС. : )
Спасибо за ссылку. Уже изучал её. Генерация ИНН необходима для создания тестовых значений. Тем не менее, нигде не могу найти информацию об алгоритме составления цифр 4-10
function INN(const INN: string): Boolean; const factor1: array[0..8] of byte = (2, 4, 10, 3, 5, 9, 4, 6, 8); factor2: array[0..9] of byte = (7, 2, 4, 10, 3, 5, 9, 4, 6, 8); factor3: array[0..10] of byte = (3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8); var i: byte; sum: word; sum2: word; begin Result := False; try if Length(INN) = 10 then begin sum := 0; for i := 0 to 8 do sum := sum + StrToInt(INN[i + 1]) * factor1[i]; sum := sum mod 11; sum := sum mod 10; Result := StrToInt(INN[10]) = sum; end else if Length(INN) = 12 then begin sum := 0; for i := 0 to 9 do sum := sum + StrToInt(INN[i + 1]) * factor2[i]; sum := sum mod 11; sum := sum mod 10; sum2 := 0; for i := 0 to 10 do sum2 := sum2 + StrToInt(INN[i + 1]) * factor3[i]; sum2 := sum2 mod 11; sum2 := sum2 mod 10; Result := (StrToInt(INN[11]) = sum) and (StrToInt(INN[12]) = sum2); end; // except Result := False; end; // try end;
Option Explicit Option Base 1 '123456789012345678901234567890123456h8nor@ya567890123456789012345678toster56789 Function CRC_ITN(ByVal ITN12orTIN10 As Double) As Boolean ' Проверка ИНН Dim FactorSum() As Variant, i As Integer, n As Byte, s As Integer FactorSum = Array(3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8) n = Len(CStr(ITN12orTIN10)) ' По длине определяем: Физ или Юр лицо If n - 1 > UBound(FactorSum) Then Exit Function ' False, если больше 12 цифр For i = n - 1 To 1 Step -1 s = s + Mid(ITN12orTIN10, i, 1) * FactorSum(12 - n + i) Next i: i = (s \ 11) * 11 If Right(ITN12orTIN10, 1) = Right(s - i, 1) Then CRC_ITN = True If n = 12 Then If Not CRC_ITN(Left(ITN12orTIN10, n - 1)) Then CRC_ITN = False End Function
def generate_personal_inn(): nums = [random.randint(1, 9) if x == 0 else random.randint(0, 9) for x in range(0, 10)] weights = [ [7, 2, 4, 10, 3, 5, 9, 4, 6, 8], [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8] ] nums.append(sum([n * w for w, n in zip(weights[0], nums)]) % 11 % 10) nums.append(sum([n * w for w, n in zip(weights[1], nums)]) % 11 % 10) return ''.join(map(str, nums))