もしマイナンバーがひらがなだったら

Pocket

マイナンバーカードが健康保険証として使えるようになるが問題が起きているという記事がありました。

健康保険証 「誤り3万件」が映すマイナンバーの不思議: 日本経済新聞

データの不整合があり、その原因の多くはマイナンバーの誤入力ではないかというものです。
12桁もある数字の入力なので誤入力はありえます。チェックデジットはあるもののそれも10件に1件の割合でスルーしてしまいます。

もしマイナンバーがひらがなだったら桁数が減って入力ミスも減るのではないか。
試してみました。

ひらがなは五十音と言われますが重複がありますので次の46音とします。
あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん

「あ」を0、「い」を1、「ん」を45としてこれらの順列で数を表すことを考えます。
つまり46進数です。
999999999999の対数(底46)は7.0107ですので桁は8になります。
12桁の10進数は8桁の46進数で表せます。

実際に変換するプログラムを書いてみました。Pythonです。

def num2kana(num):
  kana_text = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん"
  base = len(kana_text)  
  print("base", base)
  n = num
  ks = []
  while n > 0:
    amari = n % base
    k = kana_text[int(amari)]
    ks.append(k)
    n = (n - amari) / base
  return "".join(ks)

これを使うと「999999999999」は「やうきかしはせう」で表せます。
12桁の数が8桁のひらがなになりました。大した短縮にはなりませんでした。

ついでに復号用のコードも書いてみました。

def kana2num(kana):
  kana_text = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよわをん"
  base = len(kana_text)
  num = 0
  for i, k in enumerate(list(kana)):
    num += base ** i * (kana_text.find(k))
  return num

[ 2021年4月8日 | カテゴリー: ニュース | タグ: ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報