【Python3】運転免許証のチェックディジットを使用して免許証番号か正しい番号か調べる

今回は運転免許証番号が正しいものかどうか簡単に検査するスクリプトを作成してみます。

運転免許証の番号は12桁構成

運転免許証番号は12桁で構成されています。

今回のスクリプトを作成する前に

ざっと免許証番号はどのように構成されているのかお教えします。

順に

公安委員会コード(2)|年号記号(2)|交付番号(6)|チェックデジット(1)|再交付番号(1)

です。

チェックデジットがキモ

今回は免許証番号のうちチェックデジットというものを使って免許証番号が正しい番号か検査します。

チェックデジットとは

チェックディジット-Wikipedia

チェックディジットは、符号が正しいものであるかどうかを検査するために符号に付加される数字である。

これによって符号の冗長性を増し、誤りが発見できるようになる。

また公的な証明書の識別番号はチェックディジットの計算式を非公表とすることで、

偽造されたものをチェックディジットによって発見することができる。

今回符号と呼ばれるものはチェックデジットの前10桁の数字です。

計算方法などは下記を参考にします。

運転免許証番号の構造と番号が正しいかどうかを調べる方法

上記の手順としては

①免許証番号前10桁に対して5,4,3,2,7,6,5,4,3,2を順にかけて足す

②結果を11で割った余りを出す

③さらに11から余りを引く

④チェックデジットと計算した結果が合えば番号自体は正しい

計算方法をプロットしたサンプルコード

・checkdigit.py

import sys

COEFFICIENT_NUMBERS = [5,4,3,2,7,6,5,4,3,2]
CONST_NUMBER = 11

def checkDigit(input_number):
    if len(input_number) == 12:
        checknumber = input_number[0:10]
        count = sum([int(num) * COEFFICIENT_NUMBERS[i] for i,num in enumerate(checknumber)])
        didit = CONST_NUMBER - count % CONST_NUMBER
        print("number is ",int(input_number[10]) == didit) 
    else:
        print("Input error. Wrong number of digits.")
        return
        
if __name__ == "__main__":
    args = sys.argv
    checkDigit(args[1])

 

実行方法

python checkdigit.py 111111111111

実際に計算方法を参考にした記事の例である「309212345690」で試すと9がはじき出され一致した。

実際に興味がある方はスクリプトを実行し試してみてほしい

あわせて読みたい