documents:code:code-014
目次
地方公共団体コードのチェックデジット検証
日本の地方公共団体コード(自治体コード)は、総務省によって定められた6桁の数値で構成されており、最後の1桁は チェックデジット(検査数字)として使用されます。このチェックデジットは、誤入力や誤認識を防ぐために、Modulo 11(モジュロ11)方式によって計算されます。
都道府県コード・市区町村コード
- 6桁構成の場合
都道府県コード(2桁) + 市区町村コード(3桁) + チェックデジット(1桁)
- 5桁構成の場合
都道府県コード(2桁) + 市区町村コード(3桁)
チェックデジットの計算方法
チェックデジットは、最初の5桁に対して以下の手順で計算されます。
ステップ1: 重みを掛ける
各桁に以下の重みを掛けます(左から順に):
- 6桁のうち、最初の5桁に対して
- 1桁目 × 6
- 2桁目 × 5
- 3桁目 × 4
- 4桁目 × 3
- 5桁目 × 2
ステップ2: 合計を求める
ステップ1の掛け算の結果をすべて合計します。
ステップ3: Modulo 11 を計算する
ステップ2で求めた合計値を 11 で割った余り(mod 11)を求めます。
ですから余りは 10 を越えません。0~10 の間となります。
ステップ4: チェックデジットを求める
ステップ3で求めた余りを11から引きます。計算結果の下1桁がチェックディジットになります。
- 11 - 余り = チェックデジット ※下1桁
11から余りを引いた結果が2桁になるのは余りが 0 か 1 の時だけ。
余り | 11 - 余り | チェックデジット |
---|---|---|
0 | 11 - 0 = 11 | 1 |
1 | 11 - 1 = 10 | 0 |
2 | 11 - 2 = 9 | 9 |
3 | 11 - 3 = 8 | 8 |
4 | 11 - 4 = 7 | 7 |
5 | 11 - 5 = 6 | 6 |
6 | 11 - 6 = 5 | 5 |
7 | 11 - 7 = 4 | 4 |
8 | 11 - 8 = 3 | 3 |
9 | 11 - 9 = 2 | 2 |
10 | 11 - 10 = 1 | 1 |
- 余りが 0 の場合はチェックデジットは 1 になります。※ 11 - 0 = 11 → 1
- 余りが 1 の場合はチェックデジットは 0 になります。※ 11 - 1 = 10 → 0
例
例えば、地方公共団体コードの最初の5桁が「12345」の場合:
- 1 × 6 = 6
- 2 × 5 = 10
- 3 × 4 = 12
- 4 × 3 = 12
- 5 × 2 = 10
合計: 6 + 10 + 12 + 12 + 10 = 50
50 mod 11 = 6
チェックデジット = 11 - 6 = 5 → 5
したがって、完全な地方公共団体コードは「123455」となります。
実際の適用例
以下に、実際の地方公共団体コードを使ったチェックデジットの計算例を示します。
地方公共団体 | 5桁コード | 計算 | 6桁コード |
---|---|---|---|
東京都千代田区 | 13101 | * 1 × 6 = 6 * 3 × 5 = 15 * 1 × 4 = 4 * 0 × 3 = 0 * 1 × 2 = 2 合計: 6 + 15 + 4 + 0 + 2 = 27 27 mod 11 = 5 チェックデジット = 11 - 5 = 6 | 131016 |
千葉県香取市 | 12236 | * 1 × 6 = 6 * 2 × 5 = 10 * 2 × 4 = 8 * 3 × 3 = 9 * 6 × 2 = 12 合計: 6 + 10 + 8 + 9 + 12 = 45 45 mod 11 = 1 チェックデジット = 11 - 1 = 10 → 0 | 122360 |
愛媛県西予市 | 38214 | * 3 × 6 = 18 * 8 × 5 = 40 * 2 × 4 = 8 * 1 × 3 = 3 * 4 × 2 = 8 合計: 18 + 40 + 8 + 3 + 8 = 77 77 mod 11 = 0 チェックデジット = 11 - 0 = 11 → 1 | 382141 |
沖縄県うるま市 | 47213 | * 4 × 6 = 24 * 7 × 5 = 35 * 2 × 4 = 8 * 1 × 3 = 3 * 3 × 2 = 6 合計: 24 + 35 + 8 + 3 + 6 = 76 76 mod 11 = 10 チェックデジット = 11 - 10 = 1 | 472131 |
Pythonによるチェックデジット計算
以下は、Pythonを使って地方公共団体コードのチェックデジットを計算する例です。
def calculate_check_digit(code5): """ Calculate the Modulo 11 check digit for a 5-digit Japanese local government code. """ if len(code5) != 5 or not code5.isdigit(): raise ValueError("Input must be a 5-digit numeric string.") weights = [6, 5, 4, 3, 2] total = sum(int(digit) * weight for digit, weight in zip(code5, weights)) remainder = total % 11 check_digit = 11 - remainder if check_digit == 10 or check_digit == 11: check_digit = 0 return str(check_digit) # 実例 chiyoda_code = "13101" sendai_code = "04100" print("千代田区コード:", chiyoda_code + calculate_check_digit(chiyoda_code)) # → 131016 print("仙台市コード:", sendai_code + calculate_check_digit(sendai_code)) # → 041009
このコードを使えば、任意の5桁の自治体コードに対して正しいチェックデジットを簡単に計算できます。
注意点
- この方式は、入力ミスや桁の入れ替えなどの検出に有効です。
- チェックデジットが「0」になる場合もあります。
関連リンク
記事作成者
この記事は、AIアシスタント Copilot(Microsoft GPT-4) によって生成されました。 k896951が加筆修正を行いました。
documents/code/code-014.txt · 最終更新: by k896951