全国地方公共団体コードは6桁として定義されていますが、最後の1桁はチェックディジットです。オープンデータには市区町村のコードとして、チェックディジットを除いた5桁のコードを含んでいる場合があります。
たまに5桁のコードよりチェックディジットを計算して付与し、6桁にしたいときがあります。ちょっと取り組んでみたので、その作業ログです。
検算に使用したデータは総務省の全国地方公共団体コードのページより入手しました。
全国地方公共団体コードのチェックディジットの仕様は上記のPDFの記載(11 検査数字)が原本にあたると思いますが、わかりにくかったのでWikipediaの記載を参考にコードを記述しました。
検算に使用するExcelファイルは000730858.xlsxとしてダウンロードされました。これをSQLワークショップのデータ・ワークショップよりロードします。
SQLワークショップのユーティリティに含まれる、データ・ワークショップを実行します。ページが開いたら、データのロードを実行します。
データのロードが完了します。
ほぼデフォルトのままなので、列名が日本語のままになっています。
チェックサムの計算と検算には以下のSQLを使用しました。
with
function append_checkdigit(p_code in varchar2)
return varchar2
is
begin
return p_code
||
substr(
to_char(
(11 -
mod(
(6*to_number(substr(p_code,1,1)))
+ (5*to_number(substr(p_code,2,1)))
+ (4*to_number(substr(p_code,3,1)))
+ (3*to_number(substr(p_code,4,1)))
+ (2*to_number(substr(p_code,5,1)))
, 11)
),
'FM00'),
-1, 1)
;
end;
select mcode6, mcode5, append_checkdigit(mcode5) cmcode6 from
(
select mcode6, substr(mcode6, 1,5) mcode5 from
(
select to_char("団体コード", 'FM000000') mcode6
from municipality_codes order by "団体コード"
)
)
where mcode6 <> append_checkdigit(mcode5)
元々の6桁のコード(mcode6)から末尾の1桁を除いて(mcode5) います。それに対してチェックディジットを計算し、再度、末尾に1桁追加します(cmcode6)。チェックディジットの計算と追加はファンクションappend_checkdigitが行なっています。
すべての行で計算前(mcode6)と計算後(append_checkdigit(mcode5))に違いはなかったので、ファンクションに間違いはなさそうです。
完