努力したWiki

推敲の足りないメモ書き多数

ユーザ用ツール

サイト用ツール


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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki