外部公開データの厳格フォーマット検証はNFKC正規化してから行い、件数チェックサムで実データとの整合を確認する
官公庁・団体等が公開する台帳データ(Excel/CSV等)を、正規表現などの厳格なフォーマット検証(ID・番号・コード列の型チェック)にかけつつ、別途「公開ページ記載の件数」のような一次情報の件数と突き合わせるチェックサム検証を組み合わせるパイプラインでは、検証を素の文字列に対して厳格に適用すると、データ入力側の表記ゆれ(全角/半角数字・カナの混在、全角記号の混入など)で本来正当なレコードが弾かれ、チェックサムが恒常的に不一致になることがある。
判断基準: 外部データソースのID/番号列を正規表現等で厳格検証する際は、検証・格納の直前に Unicode NFKC 正規化を通してから照合する。これにより全角/半角混在という表記ゆれ由来の誤検出を吸収しつつ、構造的に異なる(列がずれている、フォーマットが根本的に違う等)壊れたデータは正規化後も依然としてマッチしないため、検証としての意味は失わない。
適用条件: (1) 検証対象が「意味は同じだが文字コードが揺れている」ことが起こりうる自由入力由来の列であること(人手入力の官公庁台帳、CSV輸出など)、(2) 別途、件数や合計のような独立した一次情報でチェックサム照合を行っており、正規化なしだと数件〜数十件規模の正当なレコードが恒常的に弾かれてチェックサムを満たせない、という2条件がある場合に適用する。
落とし穴: 正規化の適用範囲を検証対象列だけに限定すること。数値専用列(郵便番号等、全桁が意味のある数字で構成される列)に対して「先頭の数字らしき文字を除去する」ような周辺の防御的処理を安易に流用すると、正規化ではなくデータ破壊になる。列ごとに正規化してよい理由(表記ゆれの許容範囲)を明確にしてから適用する。
検証方法: 実データ全件に対して「チェックサム件数と実際にマッチした件数が一致するか」を実行して確認する。1件でも構造的に不一致な場合は、正規化で吸収すべき表記ゆれなのか、本当にデータ破損・パースロジックの誤りなのかを、不一致の具体的な行を人手で確認してから切り分ける(正規化を先に適用してから原因調査を省略しない)。