Skip to content

住所表示番号の13けた目にアルファベットが来ると落ちる不具合などを修正 - #6

Merged
cssho merged 1 commit into
masterfrom
fix-alphabet-overflow
Nov 5, 2026
Merged

cssho merged 1 commit into
masterfrom
fix-alphabet-overflow

Conversation

@cssho

@cssho cssho commented Nov 5, 2026

Copy link
Copy Markdown
Owner

概要

住所表示番号の 13 けた目(郵便番号と合わせて 20 けた目)にアルファベットが来ると、IndexOutOfRangeException で落ちる不具合を修正しました。あわせて、コードレビューで見つかった既存の不具合も修正しています。

修正内容

修正 場所
住所表示番号を 13 けたで切り捨て、13 けた目がアルファベットの場合は英字用制御コード(CC1〜CC3)のみ残す(マニュアル p20)。ConvertCCode を SelectMany と Take(13) で書き直し、境界チェックをなくした BarCode.cs
郵便番号の検証を \A[0-9]{7}\z に変更。これまでは末尾に改行がある場合や、アラビア数字など ASCII 以外の数字が検証を通り、KeyNotFoundException になっていた BarCode.cs
住所の大文字化を ToUpperInvariant() に変更。tr-TR 環境では英字 i が İ になり、黙って消えていた BarCode.cs
全角ハイフン -(U+FF0D)を半角に変換するようにした。これまでは 123-4567 が例外になっていた BarCode.cs
描画中に例外が出た場合、生成済みの Bitmap / SKBitmap を破棄するようにした Drawing 版、SkiaSharp 版
Symbols をコピーして読み取り専用で保持するようにした。これまでは string[] にキャストすると書き換えられた CustomerBarCode.cs

テスト

  • dotnet test で 94 件すべて成功。
  • 追加したテストのうち 8 件は、修正前のコードで失敗することを確認済み。
  • 13 けた目の修正は、マニュアル p20 の例(910-0067 福井県福井市新田塚3丁目80-25 J1ビル2-B → 91000673-80-25 CC1 9 1-2 CC1)を期待値にしている。
  • 1.x の出力との比較テストもすべて通っており、通常の住所の出力は変わっていない。
  • 描画中の例外時の破棄はテストを書けないため、コードを読んで確認したのみ。

対応しなかったもの

「A棟B号」のように離れた英字 1 文字同士が AB としてつながってしまう件。1.x と同じ動きで、マニュアルの例(J1ビル2-B)とは合っているため、仕様を確認してから判断する。

🤖 Generated with Claude Code

https://claude.ai/code/session_01HNb8H3ydQTR8dWU8d28osE

- 住所表示番号を13けたで切り捨て、13けた目がアルファベットの場合は
  英字用制御コードのみ残すようにした(マニュアル p20)
- 郵便番号の検証で末尾の改行や ASCII 以外の数字を受け付けないようにした
- 住所の大文字変換を実行環境のカルチャに依存しないようにした
- 全角ハイフン(U+FF0D)を半角に変換するようにした
- 描画中に例外が出た場合に生成済みのイメージを破棄するようにした
- Symbols を外部から書き換えられないようにした

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HNb8H3ydQTR8dWU8d28osE
@cssho
cssho merged commit 258acba into master Nov 5, 2026
@cssho
cssho deleted the fix-alphabet-overflow branch November 5, 2026 12:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant