Help us understand the problem. What is going on with this article?

Python マイナンバー検証用モジュールを公開

More than 3 years have passed since last update.

pip install可能なPythonでマイナンバーを検証するモジュールです。ruby版と1万件のクロスチェックを行っています。マイナンバーのチェックデジットを計算するの記事が素晴らしかったので参考にしてPython版を作ることが出来ました。

install

install
pip install mynumber

https://pypi.python.org/pypi/mynumber

sample code

install
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from mynumber import MyNumber

# マイナンバー検証
my_number = 123456789018
print MyNumber.validate(my_number)

# もっとマイナンバー検証
for my_number in MyNumber.gets(1000):
    assert MyNumber.validate(my_number)

# もっともっとマイナンバー検証 by iterator:重複あり
for my_number in MyNumber():
    assert MyNumber.validate(my_number)

根拠となる法令

○総務省令第八十五号

第五条令第八条の総務省令で定める算式は、次に掲げる算式とする。

算式

$11 - \Bigl( \displaystyle\sum_{n=1}^{11} P_n \times Q_n \Bigr) \% 11$
ただし、 $\Bigl( \displaystyle\sum_{n=1}^{11} P_n \times Q_n \Bigr) \% 11 ≦1 $の場合は、$0$とする

算式の符号

$Pn$ : 個人番号を構成する検査用数字以外の十一桁の番号の最下位の桁を $1$ 桁目としたときの $n$ 桁目の数字
$Qn$ : $1≦n≦6$ のとき $n+1$、 $7≦n≦11$ のとき $n-5$

原文マイナンバーのチェックデジットを計算するの記事の数式を引用させて頂きました。

他言語版のご紹介

Ruby版で検証

マイナンバーのチェックデジットを計算するの記事のコードでクロスチェックしてみました。

ruby_mynumber_validate.rb
#!/usr/bin/env ruby
def validate_my_number(mynumber)
  # 整数列化
  digits = mynumber.to_s.chars.map(&:to_i)
  # 12桁しか認めない
  return false unless digits.length == 12
  # チェックデジットを分離します
  check_digit = digits.pop

  # 残った数字を小さい方から調べます
  digits.reverse!

  # 数列の和を11で割った余りを計算します
  remainder =  (1..11).inject(0) {|sum, i|
    p = digits[i-1]
    q = (i <= 6) ? i+1 : i-5
    sum + p*q
  } % 11

  case remainder
    when 0,1
      check_digit === 0
    else
      check_digit === (11 - remainder)
  end
end

my_numbers = [
    xxxxx,
    xxxxx,
    xxxxx,
    xxxxx,
]

my_numbers.each do |num|
  r = validate_my_number(num)
  if r == false then
    p num
  end
end




haminiku
やや,かみごたえがある。T字形の骨をはさんで片側にヒレ,片側にサーロインの肉のついた大きな塊
http://subc.github.io/
dena_coltd
    Delight and Impact the World
https://dena.com/jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away