Контрольная сумма снилс python

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.

Generating, validating and formatting SNILS number / Генерирует, проверяет и форматирует СНИЛС

License

Envek/snils

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.

Читайте также:  Css style margin center

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

Generating, validating and formatting SNILS number (Russian pension insurance individual account number).

Генерация, валидация и форматирование СНИЛС (Страхового номера индивидуального лицевого счёта).

Add this line to your application’s Gemfile:

Or install it yourself as:

Snils.new.formatted #=> "216-471-647 63"
Snils.new("21647164763").valid? #=> true Snils.new("21647164760").valid? #=> false Snils.new("21647164760").errors #=> [:invalid] Snils.new("216471647").errors #=> [[:wrong_length, 11>], :invalid]

Validating Rails model attributes:

    Modify your gemfile to require snils/rails

gem 'snils', require: 'snils/rails'
validates :snils, presence: true, uniqueness: true, snils: true

Generating SNILSes in factories for tests:

FactoryGirl.define do # You can generate random valid SNILSes sequence :snils do |_| Snils.generate end # Or sequenced ones sequence :snils do |counter| Snils.generate(counter) end factory :user do snils end end

Recommended workflow for Ruby on Rails projects

# app/decorators/user_decorator.rb class UserDecorator < Draper::Decorator delegate_all def snils @formatted_snils ||= Snils.new(object.snils).formatted end end
# app/models/user.rb class User < ActiveRecord::Base validates :snils, presence: true, uniqueness: true, snils: true def snils=(value) write_attribute(:snils, Snils.new(value).raw) end end

With this setup you will always store raw (only digits) value in database and always will show pretty formatted SNILS to users.

  1. Fork it ( https://github.com/Envek/snils/fork )
  2. Create your feature branch ( git checkout -b my-new-feature )
  3. Commit your changes ( git commit -am ‘Add some feature’ )
  4. Push to the branch ( git push origin my-new-feature )
  5. Create a new Pull Request

About

Generating, validating and formatting SNILS number / Генерирует, проверяет и форматирует СНИЛС

Источник

d1i1m1o1n / СНИЛС

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

if(!empty($_POST))
// Массив сообщений об ошибках
$error = array();
// Удаляем тире и пробелы
$number = str_replace(array(» «, «-«),
array(«», «»),
$_POST[‘number’]);
$pattern = «|^\d$|»;
if(!preg_match($pattern, $number))
$error[] = «Введите число, содержащее 11 символов»;
>
// Контрольная сумма
$control = substr($number, -2);
// Число
$number = substr($number, 0, 9);
// Проверяем можно ли подсчитывать
// контрольную сумму
if($number < "001001998")
$error[] = «Подсчет контрольной суммы производить нельзя»;
>
// Если ошибок нет, вычисляем контрольную сумму
if(empty($error))
// Вычисляем контрольную сумму
$result = 0;
$total = strlen($number);
for($i = 0; $i < $total; $i++)
$result += ($total — $i) * $number[$i];
>
// Корректируем контрольное число
if($result == 100 || $result == 101) $result = «00»;
if($result > 101) $result %= 101;
// Проверчем контрольное число
if($result == $control) echo «Контрольное число корректное»;
else echo «Контрольное число не корректное»;
>
// Если есть ошибки выводим их
echo «
«;
echo implode(«
«, $error);
echo «

«;

>
?>
‘/>

Источник

Повышение качества поиска немаскированных данных платежных карт и персональных данных

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

Так, алгоритмы проверки контрольного числа банковской карты, ИНН и СНИЛС способствует повышению качества определения ДПК и ПДн в огромном объеме анализируемой информации.

Само по себе заданное контрольное число – как правило последнее число номера равное сумме всех чисел номера или математический результат других операций с цифрами.

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

2. Должно выполняться условие, что все оставшиеся цифры в номере верные.

Когда неизвестна позиция, где существует ошибка, нужно найти наиболее подходящий вариант решения.

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

При выявлении номеров платежных карт используется упрощённый алгоритм Луна:

2. Нечётные – не изменяются.

3. Чётные необходимо умножить на два.

4. Если при умножении получается значение, превышающее девять, то оно заменяется однозначным числом (суммой чисел получившегося произведения).

5. Все полученные цифры складываются.

6. Если общее число делится без остатка на 10, то исходные данные верны. В данном примере номер банковской карты неверен. Номер будет верен, если последнюю цифру 4 заменить на 7.

Пример кода на языке Python:

cards_arr = ['4561 2612 1234 5467', '4561 2612 1234 5464'] for card_str in cards_arr: number_arr = list(card_str.replace(' ', '')) if len(number_arr) != 16: print('!Некорректный номер карты! ' + card_str) continue even_pos_sum = 0 for num in number_arr[1::2]: even_pos_sum += int(num) odd_pos_sum = 0 for num in number_arr[-2::-2]: dub_num = int(num) * 2 if dub_num < 10: odd_pos_sum += dub_num else: odd_pos_sum += sum(map(int, str(dub_num))) if (even_pos_sum + odd_pos_sum) % 10 == 0: print('Номер карты корректный') else: print('!Некорректный номер карты! ' + card_str) 

Алгоритм выявлении (на примере СНИЛС)

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

  1. Все элементы Х по очереди умножить на обратный порядковый номер (1-ая цифра Х порядковый номер равен 9, для 2-й – 8 и т.п.)
  2. Суммируем получившиеся результаты.
  3. Полученная сумма сравнивается с цифрой 100.
  4. Если она меньше 100, то это значение – и есть искомое число.
  5. Если она лежит в интервале от 100 до 101, то нужное число – 00.
  6. Если она больше 101, то делим её на 101. Но, если значение не больше 300, то вычитаем из нее 101 до того момента, пока не получим цифру меньше ста. Полученное число определяется по 2-м пунктам, рассмотренных выше.

Рассмотрим следующий номер:

Для проведения проверки нужно умножить каждое число на свой порядковый номер, а потом просуммировать их все:

Если получившееся число попало в промежуток от 101 до 300, то, следовательно, нужно произвести следующее действие 155 — 101 = 54. Контрольное значение верно.

Пример кода на языке Python:

snils_arr = ['160-722-773 54', '160-722-773 23'] for snils_str in snils_arr: number_arr = list(snils_str.replace('-', '')[:-3]) if len(number_arr) != 9: print('!Некорректный номер СНИЛС! ' + snils_str) continue check_sum = 0 for num, k in zip(number_arr, range(9, 0, -1)): check_sum += int(num) * k while check_sum > 101: check_sum %= 101 if check_sum in (100, 101): check_sum = 0 if check_sum == int(snils_str[-2:]): print('Номер СНИЛС корректный') else: print('!Некорректный номер СНИЛС! ' + snils_str) 

Способ выявлении (на примере ИНН)

Строка состоит из 12 символов:

  1. Цифра стоящая предпоследней (11-й) совпадает с последней цифрой остатка от деления на 11 числа, являющегося суммой: k1*7 + k2*2 + k3*4 + k5*3 + k6*5 + k7*9 + k8*4 + k9*6 + k10*8, где k1, … , k10– первые десять цифр ИНН.
  2. Цифра стоящая последней (12-й) равна последней цифре остатка от деления на 11 числа, являющегося суммой: k13 + k27 + k32 + k44 + k510 + k63 + k75 + k89 + k94 + k106 + k11*8, где k1, … ,k11 – первые одиннадцать цифр ИНН.

Реализация на языке Python:

inn_arr = ['500100732259', '500100732252'] koeffs = (3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8) for inn_str in inn_arr: if len(inn_str) != 12: print('!Некорректный номер ИНН! ' + inn_str) continue inn_arr = list(inn_str) penultimate_sum = 0 for num, k in zip(inn_arr[:10], koeffs[1:]): penultimate_sum += int(num) * k if str(penultimate_sum % 11)[-1] != inn_str[-2]: print('!Некорректный номер ИНН! ' + inn_str) continue last_sum = 0 for num, k in zip(inn_arr[:11], koeffs): last_sum += int(num) * k if str(last_sum % 11)[-1] != inn_str[-1]: print('!Некорректный номер ИНН! ' + inn_str) continue print('Номер ИНН корректный') 

Спектр применения расчета такого числа очень широк и может применяться также для регистрационных номеров предприятий, идентификационного номера транспортного средства (VIN), ИНН юр.лица, ISIN и т.д.

Источник

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

Распознавание ИНН, Паспорта и СНИЛС

Источник

Оцените статью