From 0ba908364570764856cda5a926b0a3ddf0565e33 Mon Sep 17 00:00:00 2001 From: cssho Date: Sat, 7 Nov 2026 12:02:23 +0900 Subject: [PATCH] =?UTF-8?q?=E9=83=B5=E4=BE=BF=E7=95=AA=E5=8F=B7=E3=81=AE?= =?UTF-8?q?=E5=8C=BA=E5=88=87=E3=82=8A=E3=83=BB=E7=A9=BA=E7=99=BD=E3=83=BB?= =?UTF-8?q?=E3=80=92=E3=82=92=E5=8F=97=E3=81=91=E4=BB=98=E3=81=91=E3=80=81?= =?UTF-8?q?=E3=83=87=E3=83=A2=E3=81=A8=E9=81=8B=E7=94=A8=E3=81=BE=E3=82=8F?= =?UTF-8?q?=E3=82=8A=E3=82=92=E6=94=B9=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 郵便番号の長音・マイナス・ダッシュ・空白の区切りと先頭の〒を読み飛ばす(2.1.0) - Dependabot でデモの Blazor WebAssembly のパッケージをグループにする - デモの結果全体を読み上げず、状態の短い文だけを読み上げる - デモのコード例に SavePng 用の using を追加 - マニュアルへのリンクを https にそろえ、README の空行を修正 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01HNb8H3hV3ndoRpyuu59g1u --- .github/dependabot.yml | 4 ++++ CLAUDE.md | 4 ++-- Directory.Build.props | 2 +- README.md | 5 ++-- ZipConvertCustomerBarCode.Demo/App.razor | 11 +++++---- .../wwwroot/css/app.css | 13 ++++++++++ .../BarCodeTests.cs | 16 ++++++++++--- ZipConvertCustomerBarCode.Tests/PrintTests.cs | 2 +- .../SupplementaryRuleTests.cs | 2 +- ZipConvertCustomerBarCode/BarCode.cs | 24 +++++++++++-------- ZipConvertCustomerBarCode/CustomerBarCode.cs | 4 ++-- .../ZipCodeDictionary.cs | 8 +++---- ZipConvertCustomerBarCode/ZipCodeEntry.cs | 2 +- 13 files changed, 66 insertions(+), 31 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index a1edc23..2fcb202 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -18,3 +18,7 @@ updates: patterns: - SkiaSharp - SkiaSharp.* + # デモサイト(Blazor WebAssembly)のパッケージも、同じバージョンに揃える必要がある + blazor-webassembly: + patterns: + - Microsoft.AspNetCore.Components.WebAssembly* diff --git a/CLAUDE.md b/CLAUDE.md index db122de..a29d702 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -47,13 +47,13 @@ - CI の `verify-lockfile.yml` が PR・push・週1回でロックファイルを検証する。アクションの更新は Dependabot(`.github/dependabot.yml`、既定の cooldown でリリースから3日待つ)が、ロックファイルの作り直しも含めて PR にする。 - パッケージ作成時の検証(`EnablePackageValidation`)で、net8.0 版から netstandard2.0 版の公開 API が欠けているとエラー(CP0002)になる(net8.0 版にだけ API を足すのは検出しない)。 - あわせて、公開済みのバージョン(`Directory.Build.props` の `PackageValidationBaselineVersion`)と比べて公開 API を削除・変更していないかも確認する。破壊的変更をするメジャーバージョンアップでは、この基準を外すか更新する。 -- NuGet パッケージの更新も Dependabot が PR にする。`SkiaSharp` とテスト用の `SkiaSharp.NativeAssets.Linux.NoDependencies` はバージョンを揃える必要があるので、グループにまとめて一緒に更新する。 +- NuGet パッケージの更新も Dependabot が PR にする。`SkiaSharp` とテスト用の `SkiaSharp.NativeAssets.Linux.NoDependencies` はバージョンを揃える必要があるので、グループにまとめて一緒に更新する。デモの `Microsoft.AspNetCore.Components.WebAssembly` と `...DevServer` も同様にグループにしている。 - `build.yml` は、ドキュメントなどビルドに関係しないファイル(`*.md`・`LICENSE`・`docs/`・`.claude/`・`.github/dependabot.yml`)だけの変更では test と pack をスキップする(`changes` ジョブで判定)。`paths-ignore` を使うと必須チェックが報告されず PR をマージできなくなるので使わない。 - master はルールセットで保護している(PR 経由のみ、`build-result`(test・pack の結果をまとめるジョブ)と verify-lockfile の `verify` の成功が必須)。CI のジョブ名を変えるとマージできなくなるので、ルールセットの必須チェックも合わせて変更する。 ## バーコード処理 -- 住所の変換(`BarCode.cs`)は日本郵便のバーコードマニュアル(http://www.post.japanpost.jp/zipcode/zipmanual/p19.html)に従う。コード中の番号付きコメント(1.〜6.、補足ルール1〜5)はマニュアルの手順番号に対応している。 +- 住所の変換(`BarCode.cs`)は日本郵便のバーコードマニュアル(https://www.post.japanpost.jp/zipcode/zipmanual/p19.html)に従う。コード中の番号付きコメント(1.〜6.、補足ルール1〜5)はマニュアルの手順番号に対応している。 - マニュアルでは住所を「住所A(町域名まで)」と「住所B(町域名以降)」に分け、住所Bだけから抜き出す。`Create(郵便番号, 住所)` は住所全体を住所Bとして扱うため、町域名に特定文字の前の漢数字を含む住所(一番町、八丁堀など)では誤る。これは既知の制限で、`Create(郵便番号, 住所A, 住所B)` か `ZipCodeDictionary` を渡す `Create` を推奨している。 - バーコードは常に 23 シンボル: スタート + 郵便番号 7 桁 + 住所表示番号 13 枠(不足分は `CC4` で埋める)+ チェックデジット + ストップ。 - バーの形は `CustomerBarCode.cs` の `BarPatternDic` で定義(1 シンボル = 幅 12px に 3 本、x=0/4/8、幅 2px、上・中・下段 各 4px)。この表は旧バージョンの GIF 画像とピクセル単位で一致することを確認済みなので、変更するときは既存出力と比較する。 diff --git a/Directory.Build.props b/Directory.Build.props index cd8a21a..613c8e5 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -6,7 +6,7 @@ それ以外は -p:VersionSuffix=ci.N でプレリリース版(2.0.0-ci.N)にする。 アセンブリのバージョンがここから決まり、PackageValidationBaselineVersion 以上である必要がある --> - 2.0.0 + 2.1.0 cssho ZipConvertCustomerBarCode Copyright (c) 2015 cssho diff --git a/README.md b/README.md index 64544be..2a10bbf 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ ## カスタマバーコード > お客さまがあらかじめ郵便物に印字する場合のバーコードがカスタマバーコードです。カスタマバーコードは、原則として差し出しの必要条件ではなく、料金割引を受けようとする場合に印字するもので、あて名印字と同時に印字できるような仕様としています。 -[郵便局 - 郵便番号・バーコードマニュアル](http://www.post.japanpost.jp/zipcode/zipmanual/index.html) +[郵便局 - 郵便番号・バーコードマニュアル](https://www.post.japanpost.jp/zipcode/zipmanual/index.html) ## デモ **https://cssho.github.io/ZipConvertCustomerBarCode/** @@ -53,7 +53,7 @@ using ZipConvertCustomerBarCode; // 郵便番号, 住所A(町域名までの住所), 住所B(町域名以降の住所) CustomerBarCode code = BarCode.Create("1000013", "東京都千代田区霞が関", "1丁目3番2号 郵便プラザ503室"); ``` -郵便番号が7桁の数値でない場合は `ArgumentException` になります。 +郵便番号は全角数字でもよく、ハイフン・長音(ー)などの区切り、空白、先頭の「〒」は読み飛ばします。7桁の数値でない場合は `ArgumentException` になります。 住所表示番号は、[郵便番号・バーコードマニュアル](https://www.post.japanpost.jp/zipcode/zipmanual/p19.html)の抜き出しルール(補足ルールを含む)に従って住所Bから抜き出します。 「丁目・番地・号」などの前の漢数字は算用数字に変換し(例:十一丁目 → 11)、「2F」のような階数の F は抜き出しません。 @@ -86,6 +86,7 @@ CustomerBarCode code = BarCode.Create("1020082", "東京都千代田区一番町 - 代表の郵便番号(町域名が「以下に掲載がない場合」)は町域名がわからないため、分割しません。 - `IsRepresentativeZipCode` は郵便番号データに基づいて判定します。郵便番号データにない番号(郵便番号データより新しい番号など)は、下2けたで判定します。 - 従来の Shift_JIS 形式(KEN_ALL.CSV)は、長い町域名が複数行に分かれているため対象外です。 + ### 事業所の個別郵便番号データを使う 日本郵便の[事業所の個別郵便番号データ](https://www.post.japanpost.jp/zipcode/dl/jigyosyo/index-zip.html)(`jigyosyo.zip`、Shift_JIS)も一緒に読み込むと、大口事業所・私書箱の個別郵便番号を扱えます。 diff --git a/ZipConvertCustomerBarCode.Demo/App.razor b/ZipConvertCustomerBarCode.Demo/App.razor index ad246d9..f97d695 100644 --- a/ZipConvertCustomerBarCode.Demo/App.razor +++ b/ZipConvertCustomerBarCode.Demo/App.razor @@ -30,7 +30,7 @@
@@ -63,12 +63,14 @@ } -
+

結果

@{ // 入力のたびに作り直す(BarCode.Create は軽いので、ボタンを押さなくても即時に反映する) var (barcode, error) = Generate(); } + @* 結果全体を読み上げると入力のたびにシンボル列まで読まれるため、状態の短い文だけを読み上げる *@ +

@(error ?? (barcode == null ? "" : $"郵便番号 {barcode.ZipCode} のバーコードを作りました。"))

@if (error != null) {

@error

@@ -211,11 +213,12 @@ var create = split ? $"BarCode.Create({Literal(zipCode)}, {Literal(townAddress)}, {Literal(blockAddress)})" : $"BarCode.Create({Literal(zipCode)}, {Literal(address)})"; - return "using ZipConvertCustomerBarCode;\n\n" + return "using ZipConvertCustomerBarCode;\n" + + "using ZipConvertCustomerBarCode.Skia; // SavePng を使う場合(ZipConvertCustomerBarCode.SkiaSharp パッケージ)\n\n" + $"var code = {create};\n" + "string svg = code.ToSvg(scale: 3); // 画像用(依存ライブラリなし)\n" + "string printSvg = code.ToPrintSvg(point: 10); // 印刷用(mm 単位の実寸)\n" - + "// SkiaSharp で PNG にする場合: code.SavePng(\"barcode.png\", scale: 3);"; + + "code.SavePng(\"barcode.png\", scale: 3); // PNG(SkiaSharp)"; } } } diff --git a/ZipConvertCustomerBarCode.Demo/wwwroot/css/app.css b/ZipConvertCustomerBarCode.Demo/wwwroot/css/app.css index 0374224..51a8dab 100644 --- a/ZipConvertCustomerBarCode.Demo/wwwroot/css/app.css +++ b/ZipConvertCustomerBarCode.Demo/wwwroot/css/app.css @@ -362,6 +362,19 @@ code, pre { overflow-wrap: anywhere; } +/* 画面には表示せず、スクリーンリーダーにだけ読ませる */ +.visually-hidden { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0 0 0 0); + white-space: nowrap; + border: 0; +} + .footer { color: var(--muted); font-size: 0.85rem; diff --git a/ZipConvertCustomerBarCode.Tests/BarCodeTests.cs b/ZipConvertCustomerBarCode.Tests/BarCodeTests.cs index 58b301d..cc4c755 100644 --- a/ZipConvertCustomerBarCode.Tests/BarCodeTests.cs +++ b/ZipConvertCustomerBarCode.Tests/BarCodeTests.cs @@ -14,7 +14,7 @@ public void シンボル列が1x版と一致する(string zipCode, string addres } // 住所表示番号は13けたまで。13けた目がアルファベットの場合は英字用制御コードのみ残す - // http://www.post.japanpost.jp/zipcode/zipmanual/p20.html + // https://www.post.japanpost.jp/zipcode/zipmanual/p20.html [Theory] // マニュアル p20 の例 [InlineData("9100067", "福井県福井市新田塚3丁目80-25 J1ビル2-B", "STC 9 1 0 0 0 6 7 3 - 8 0 - 2 5 CC1 9 1 - 2 CC1 9 SPC")] @@ -36,7 +36,15 @@ public void 住所表示番号は13けたで切り捨てる(string zipCode, stri [InlineData("0140113")] [InlineData("014‐0113")] [InlineData("014-0113")] - public void 郵便番号は全角とハイフンを受け付ける(string zipCode) + // 日本語入力で打ちやすい区切り(長音・マイナス)、空白、先頭の〒 + [InlineData("014ー0113")] + [InlineData("014ー0113")] + [InlineData("014−0113")] + [InlineData("014 0113")] + [InlineData(" 014-0113 ")] + [InlineData("〒014-0113")] + [InlineData("〒 014-0113")] + public void 郵便番号は全角と区切りと先頭の郵便マークを受け付ける(string zipCode) { var code = BarCode.Create(zipCode, "添60-1"); @@ -48,8 +56,10 @@ public void 郵便番号は全角とハイフンを受け付ける(string zipCod [InlineData("014011")] [InlineData("01401130")] [InlineData("014011A")] - [InlineData("014 0113")] [InlineData("0140113\n")] + [InlineData("014\t0113")] + [InlineData("014〒0113")] + [InlineData("〒")] // アラビア・インド数字 [InlineData("٠١٤٠١١٣")] public void 郵便番号が7桁の数値でなければ例外(string zipCode) diff --git a/ZipConvertCustomerBarCode.Tests/PrintTests.cs b/ZipConvertCustomerBarCode.Tests/PrintTests.cs index e941153..1eeff78 100644 --- a/ZipConvertCustomerBarCode.Tests/PrintTests.cs +++ b/ZipConvertCustomerBarCode.Tests/PrintTests.cs @@ -3,7 +3,7 @@ namespace ZipConvertCustomerBarCode.Tests { // 印刷用の実寸 - // http://www.post.japanpost.jp/zipcode/zipmanual/p12.html + // https://www.post.japanpost.jp/zipcode/zipmanual/p12.html public class PrintTests { private readonly CustomerBarCode code = BarCode.Create("1000013", "東京都千代田区霞が関", "1丁目3番2号 郵便プラザ503室"); diff --git a/ZipConvertCustomerBarCode.Tests/SupplementaryRuleTests.cs b/ZipConvertCustomerBarCode.Tests/SupplementaryRuleTests.cs index 5628cef..cbc7db9 100644 --- a/ZipConvertCustomerBarCode.Tests/SupplementaryRuleTests.cs +++ b/ZipConvertCustomerBarCode.Tests/SupplementaryRuleTests.cs @@ -4,7 +4,7 @@ namespace ZipConvertCustomerBarCode.Tests { // 抜き出しの基本ルール・補足ルール // 期待値はマニュアルの「バーコード・データ」 - // http://www.post.japanpost.jp/zipcode/zipmanual/p19.html + // https://www.post.japanpost.jp/zipcode/zipmanual/p19.html public class SupplementaryRuleTests { [Theory] diff --git a/ZipConvertCustomerBarCode/BarCode.cs b/ZipConvertCustomerBarCode/BarCode.cs index a738ca7..25fe772 100644 --- a/ZipConvertCustomerBarCode/BarCode.cs +++ b/ZipConvertCustomerBarCode/BarCode.cs @@ -81,7 +81,7 @@ public static class BarCode /// 町域名に「特定文字(丁目、番、ノ など)の前の漢数字」を含む住所(一番町、八丁堀、三ノ輪 など)では、 /// 町域名の漢数字も住所表示番号として抜き出されるため、誤ったバーコードになる。 /// - /// 郵便番号(半角・全角数字7桁、ハイフンは可) + /// 郵便番号(半角・全角数字7桁。ハイフン・空白・先頭の〒は可) /// 住所 /// カスタマバーコード /// 郵便番号が7桁の数値でない場合 @@ -104,7 +104,7 @@ public static CustomerBarCode Create(string zipCode, string address) /// 大口事業所・私書箱の個別郵便番号(事業所の個別郵便番号データを読み込んだ場合)は、マニュアルに従い /// 個別番号のみをバーコード化し、住所表示番号は抜き出さない(13けたすべて CC4)。 /// - /// 郵便番号(半角・全角数字7桁、ハイフンは可) + /// 郵便番号(半角・全角数字7桁。ハイフン・空白・先頭の〒は可) /// 住所 /// 郵便番号データ /// カスタマバーコード @@ -125,7 +125,7 @@ public static CustomerBarCode Create(string zipCode, string address, ZipCodeDict } // 大口事業所・私書箱の個別郵便番号は、個別番号のみをバーコード化し、住所表示番号の13けたは CC4 で埋める - // http://www.post.japanpost.jp/zipcode/zipmanual/p22.html + // https://www.post.japanpost.jp/zipcode/zipmanual/p22.html if (entries.Any(x => x.IsIndividual)) { return CreateCore(zip, "", false); @@ -174,9 +174,9 @@ private static CustomerBarCode CreateCore(string zip, string address, bool isRep /// 住所表示番号は住所Bからのみ抜き出す。 /// 住所Bが住所Aで始まる場合(住所全体が渡された場合)は、住所Aの部分を取り除いてから抜き出す。 /// 住所Aとの比較では、空白、全角・半角、「ヶ」と「ケ」、漢数字と算用数字の違いは区別しない。 - /// http://www.post.japanpost.jp/zipcode/zipmanual/p17.html + /// https://www.post.japanpost.jp/zipcode/zipmanual/p17.html /// - /// 郵便番号(半角・全角数字7桁、ハイフンは可) + /// 郵便番号(半角・全角数字7桁。ハイフン・空白・先頭の〒は可) /// 住所A: 町域名までの住所(例: 東京都千代田区霞が関) /// 住所B: 町域名以降の住所(例: 1丁目3番2号 郵便プラザ503室) /// カスタマバーコード @@ -194,21 +194,25 @@ public static CustomerBarCode Create(string zipCode, string townAddress, string return Create(zipCode, blockAddress); } + // 郵便番号の区切りとして読み飛ばす文字(ハイフンのほか、日本語入力で打ちやすい長音・マイナス・ダッシュと空白) + private static readonly string PostCodeSeparators = "-‐‑–—―−-ーー  "; + /// /// 郵便番号チェック - /// ハイフンを除いて数値7桁であること + /// 区切り(ハイフン・空白など)と先頭の「〒」を除いて数値7桁であること /// /// 郵便番号 /// 郵便番号(半角数字7桁) internal static string CheckPostCode(string zipCode) { - // 全角→半角にし、ハイフンを除いて半角数字(0~9 のみ。全角以外の Unicode 数字や改行は不可)が7桁であること + // 全角→半角にし、区切りと先頭の「〒」を除いて半角数字(0~9 のみ。全角以外の Unicode 数字や改行は不可)が7桁であること var digits = new char[7]; var count = 0; foreach (var c in zipCode) { var hankaku = ToHankaku(c); - if (hankaku == '-') continue; + if (PostCodeSeparators.IndexOf(hankaku) >= 0) continue; + if (hankaku == '〒' && count == 0) continue; if (hankaku < '0' || hankaku > '9' || count == digits.Length) throw InvalidPostCode(); digits[count++] = hankaku; } @@ -242,7 +246,7 @@ private static string ExtractAddressNumber(string address) // 全角→半角 address = string.Join("", address.Select(ToHankaku)); - // http://www.post.japanpost.jp/zipcode/zipmanual/p19.html + // https://www.post.japanpost.jp/zipcode/zipmanual/p19.html // 1. まず、データ内にあるアルファベットの小文字は大文字に置き換えます。 // 実行環境のカルチャによらず変換する(tr-TR では i が İ になるため) address = address.ToUpperInvariant(); @@ -400,7 +404,7 @@ private static string[] ConvertCCode(string address) { // 数値、ハイフンは1けた、アルファベットは英字用制御コードと数字の2けたに変換し、 // 13けたに満たない場合は CC4 で埋める - // http://www.post.japanpost.jp/zipcode/zipmanual/p20.html + // https://www.post.japanpost.jp/zipcode/zipmanual/p20.html // 合計けた数が20けた(住所表示番号は13けた)を超えた場合、以降の文字については切り捨てます。 // その際、20~21けた目がアルファベット文字となった場合、20けた目の英字用制御(CC1、CC2、CC3)は残して以降は切り捨てます。 return address.SelectMany(c => BarcodeCharDic[c.ToString()]) diff --git a/ZipConvertCustomerBarCode/CustomerBarCode.cs b/ZipConvertCustomerBarCode/CustomerBarCode.cs index 514b94a..f8f25a8 100644 --- a/ZipConvertCustomerBarCode/CustomerBarCode.cs +++ b/ZipConvertCustomerBarCode/CustomerBarCode.cs @@ -64,7 +64,7 @@ internal CustomerBarCode(string zipCode, string addressNumber, bool isRepresenta /// 代表の郵便番号(郵便番号簿の「以下に掲載がない場合」の番号)の郵便物には、カスタマバーコードを付けない。 /// 郵便番号データ()を渡して生成した場合は、郵便番号データに基づいて判定する。 /// 渡さずに生成した場合は、マニュアルの「原則として下2けたが"00"」に従って判定する目安。 - /// http://www.post.japanpost.jp/zipcode/zipmanual/p18.html + /// https://www.post.japanpost.jp/zipcode/zipmanual/p18.html /// public bool IsRepresentativeZipCode { get; } @@ -157,7 +157,7 @@ public double GetPrintHeight(double point = DefaultPoint) /// /// /// 寸法は郵便番号・バーコードマニュアルに従う(10ポイントのときバー幅0.6mm、バーピッチ1.2mm、ロングバー3.6mm)。 - /// http://www.post.japanpost.jp/zipcode/zipmanual/p12.html + /// https://www.post.japanpost.jp/zipcode/zipmanual/p12.html /// /// 大きさ(8~11.5ポイント) /// バー配置 diff --git a/ZipConvertCustomerBarCode/ZipCodeDictionary.cs b/ZipConvertCustomerBarCode/ZipCodeDictionary.cs index f57b329..5ece97c 100644 --- a/ZipConvertCustomerBarCode/ZipCodeDictionary.cs +++ b/ZipConvertCustomerBarCode/ZipCodeDictionary.cs @@ -142,7 +142,7 @@ public static ZipCodeDictionary Load(Stream stream, Stream businessStream, Encod /// /// 郵便番号データに含まれるかどうか /// - /// 郵便番号(半角・全角数字7桁、ハイフンは可) + /// 郵便番号(半角・全角数字7桁。ハイフン・空白・先頭の〒は可) /// 郵便番号が7桁の数値でない場合 public bool Contains(string zipCode) { @@ -163,7 +163,7 @@ internal ZipCodeEntry[] FindEntries(string zip) /// /// 郵便番号の町域・事業所を返す(1つの郵便番号に複数の町域がある場合がある) /// - /// 郵便番号(半角・全角数字7桁、ハイフンは可) + /// 郵便番号(半角・全角数字7桁。ハイフン・空白・先頭の〒は可) /// 町域・事業所(郵便番号データにない場合は空) /// 郵便番号が7桁の数値でない場合 public IReadOnlyList Find(string zipCode) @@ -175,7 +175,7 @@ public IReadOnlyList Find(string zipCode) /// /// 代表の郵便番号(町域名が「以下に掲載がない場合」)かどうか /// - /// 郵便番号(半角・全角数字7桁、ハイフンは可) + /// 郵便番号(半角・全角数字7桁。ハイフン・空白・先頭の〒は可) /// 代表の郵便番号なら true。郵便番号データにない場合は null /// 郵便番号が7桁の数値でない場合 public bool? IsRepresentative(string zipCode) @@ -194,7 +194,7 @@ public IReadOnlyList Find(string zipCode) /// 町域名の括弧書き(「北六条東(1~7丁目)」の「(1~7丁目)」など)は除いて照合する。 /// 代表の郵便番号(町域名が「以下に掲載がない場合」)は町域名がわからないため分割しない。 /// - /// 郵便番号(半角・全角数字7桁、ハイフンは可) + /// 郵便番号(半角・全角数字7桁。ハイフン・空白・先頭の〒は可) /// 住所 /// 住所A(分割できない場合は null) /// 住所B(分割できない場合は null) diff --git a/ZipConvertCustomerBarCode/ZipCodeEntry.cs b/ZipConvertCustomerBarCode/ZipCodeEntry.cs index 441d505..158263a 100644 --- a/ZipConvertCustomerBarCode/ZipCodeEntry.cs +++ b/ZipConvertCustomerBarCode/ZipCodeEntry.cs @@ -27,7 +27,7 @@ public enum ZipCodeKind public sealed class ZipCodeEntry { // 町域名の特殊な値 - // http://www.post.japanpost.jp/zipcode/dl/utf-readme.html + // https://www.post.japanpost.jp/zipcode/dl/utf-readme.html private const string NotListed = "以下に掲載がない場合"; private const string FollowedByBlockNumber = "の次に番地がくる場合"; private const string WholeCity = "一円";