Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

CSS2017キャンドルスターセッション

13,789 views

Published on

マイナンバーのチェックデジットがかなり恥ずかしい件について
スライド中のQRコードの行き先はこれです
http://tetsutalow.github.io/mynumbermontecarlo/index.html

Published in: Technology
  • Be the first to comment

CSS2017キャンドルスターセッション

  1. 1. マイナンバーの チェックデジットが かなり恥ずかしい件について 立命館大学情報理工学部 元・総務省職員
  2. 2. Disclaimer!! 本発表は個人の見解であり 発表者の元職場や現職場の 公式見解とは関係がないし そもそも担当じゃないので 守秘義務にも抵触してません!
  3. 3. 世の中、番号がいっぱい! 社員番号 学籍番号 ISBN JAN/UPC/GS1 銀行口座番号 クレジット カード番号 IMEI IMSI個人番号 法人番号 マイナンバー 手入力する場合がある 間違えると困る
  4. 4. 電子的に入力ミスを防ぎたい これをDB照合なしにやるには… •桁数チェック •検査用数字 (Check Digit)
  5. 5. JAN(GS1)コードの チェックデジット 10 − 𝑛=1 𝑃𝑛 × 𝑄 𝑛 𝑚𝑜𝑑 10 𝑚𝑜𝑑 10 𝑃𝑛はチェックデジットを除いた 最下位を1とした時の数字 𝑄 𝑛は奇数ケタは3 偶数ケタが1
  6. 6. 具体例 綾鷹500mlのJANコード ↓ 82 mod 10 = 2 × × Code 4 9 0 2 1 0 2 1 0 7 6 4 8 重み 1 3 1 3 1 3 1 3 1 3 1 3 乗算 4 27 0 6 1 0 2 3 0 21 6 12 合計 82 × × × × × × × × × × × × ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
  7. 7. ところで… 桁数があってる場合の 入力ミスといえば •1桁入力誤り(8割くらい) •2桁入替誤り(1割くらい) 他もあるがこれらがほとんど
  8. 8. Verhoeffによる調査(郵便番号) 誤り 桁数 誤りの種 類 誤り数 頻度 1 単純誤り 9,574 79.05% 2 入替 1,237 10.21% 双子 (aa→bb) 67 0.55% 似た音 (1a→a0) 59 0.49% その他の 2桁 232 1.92% 飛び越し 入替 99 0.82% 飛び越し 双子 35 0.29% 他の飛び 越し誤り 43 0.36% その他 98 0.81% 3 169 1.40% 4 118 0.97% 5 219 1.81% 6 162 1.34% Total 12,112 誤りの種類 誤り数 頻度 1桁単純 9,574 79.05% 2桁入替 1,237 10.21% Wikipedia: Verhoeff Algorithmより
  9. 9. 先に結論 GS1のチェックデジットは •1桁入力誤りは必ず検出 •2桁入替誤りは 入れ替えた数字の差が5 なら検出できない
  10. 10. 具体例 綾鷹500mlのJANコードの先頭2桁を入替え ↓ 72 mod 10 = 2 × × Code 9 4 0 2 1 0 2 1 0 7 6 4 8 重み 1 3 1 3 1 3 1 3 1 3 1 3 乗算 9 12 0 6 1 0 2 3 0 21 6 12 合計 72 × × × × × × × × × × × × ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
  11. 11. クレジットカードの チェックデジット(Luhnアルゴリズム) 10 − 𝑛=1 𝑃𝑛 × 𝑄 𝑛 𝑚𝑜𝑑 10 𝑚𝑜𝑑 10 𝑃𝑛はチェックデジットを除いた数字 𝑄 𝑛は奇数ケタは2 偶数ケタが1 但し乗算結果が2桁の時は 1桁数字2つ分として加算
  12. 12. 先に結論 Luhnのアルゴリズムは •1桁入力誤りは必ず検出 •2桁入替誤りは 入れ替えた数字が0と9 なら検出できない
  13. 13. ISBN-10の チェックデジット(mod 11) 11 − 𝑛=1 𝑃𝑛 × 𝑄 𝑛 𝑚𝑜𝑑 11 𝑚𝑜𝑑 11 𝑃𝑛はチェックデジットを除いた数字 𝑄 𝑛はn (ISBN-10は10桁なので1~9) 答えが10の時はXとする
  14. 14. 先に結論 ISBN-10のチェックデジットは •1桁入力誤りは必ず検出 •2桁入替誤りも必ず検出 完璧! だがチェックデジットは11種
  15. 15. マイナンバーの個人番号の チェックデジット(mod 11改) 11 − 𝑛=1 𝑃𝑛 × 𝑄 𝑛 𝑚𝑜𝑑 11 𝑚𝑜𝑑 11 𝑃𝑛はチェックデジットを除いた数字 𝑄 𝑛はn+1(1≦ n≦6) n-5(7≦ n≦11) 答えが10の時は0とする これで数字だけで表現可能に
  16. 16. 先に結論 個人番号のチェックデジットは •1桁入力誤りは必ず検出 •2桁入替誤りも必ず検出 但しチェックデジットが 0と1以外の場合に限る
  17. 17. チェックデジットが0の人は大当り! チェックデジットが0なら •1桁入力誤りは1割見逃す •2桁入替誤りも1割見逃す ※チェックデジットが1の時は 2桁入替の一部を見逃す
  18. 18. 実証します
  19. 19. 誰か止めなかったのか! •いや、止めましたよ私… (パブコメで突っ込んだ) •回答: 「住民票コードで実績あるので 問題ないと考えている」
  20. 20. いろいろ調べたら… •どうやら起源は運転免許証番号 (右から2桁目がチェックデジット) 11 − 𝑛=1 𝑃𝑛 × 𝑄 𝑛 𝑚𝑜𝑑 11 𝑚𝑜𝑑 10 実に昭和41年のことらしい… 𝑄 𝑛はn+1(1≦ n≦6) n-5(7≦ n≦10)
  21. 21. 恥ずかしくないですかこれ… S務省…H務省… 算数できないんか…
  22. 22. 実は法人番号も別の方向に酷い 詳しくは検索して下さい
  23. 23. もっとマシな方法はないの? チェックデジットの計算方法で •1桁入力誤りは必ず検出 •2桁入替誤りも必ず検出 かつチェックデジットが 0~9の数字で表現可能
  24. 24. 2つ知られている •Verhoeffのアルゴリズム •インドのマイナンバーで使用 •Dammのアルゴリズム •シンガポールの特許番号で使用 どちらも群論を使う 詳しくはWikipediaで
  25. 25. 私のオススメ チェックデジットの 数式を決める機会が 今後の人生にあれば 絶対Dammアルゴリズム! DumbでもDamnでもない!

×