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

2,013 views

Published on

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

Published in: Technology

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でもない!

×
Save this presentationTap To Close