入力チェックの落とし穴

本文へ移動
JunSoftトップへ移動

入力チェックを設計するにあたり、注意しなければならないことをまとめてみました。システム開発者向けのコンテンツです。常識的なことも多いですが、あまり知られていないことや忘れがちなことも記載しています。


人名

郵便番号

住所

電話番号


メール
アドレス

日付・時間

クレジット
カード番号

人名

外国人の利用を考慮した場合、半角文字も入力可能にする必要がある。

“髙橋(はしごだか)”のようにJISでは定義されていない文字は、文字化けを起こして入力チェックで半角文字と誤判定することがある。旧字体・異字体・機種依存文字はテスト時によく確認しておくこと。

以下の文字も人名に使用可能と、戸籍法に定められている。拗音・撥音・促音は有名だが、「ゎ」,「ゐ」,「ゑ」などは意外に知られていない。読みがなの入力チェックの際は以下の文字に注意すること。

ぁ~ぉ,っ,ゃ,ゅ,ょ,ゎ,ゐ,ゑ,ァ~ォ,ヵ,ヶ,ッ,ャ,ュ,ョ,ヮ ,ヴ,ヰ,ヱ,ー,ゝ,ゞ,々

このページの先頭へ

郵便番号

郵便番号マスタ を使用した住所の妥当性チェックは、下記のことに注意する必要があるので、行わないほうが無難。

郵便番号 都道府県 市区町村 町域
001-0000 北海道 札幌市北区 以下に掲載がない場合
【補足:町域欄に注釈が登録されている】
104-0053 東京都 中央区 晴海(次のビルを除く)
【補足:町域欄に注釈が登録されている】
150-6001 東京都 渋谷区 恵比寿恵比寿ガーデンプレイス(1階)
【補足:町域+ビル名での登録】
602-8414 京都府 京都市上京区 西北小路町(猪熊通上立売上る、……中略……、大宮通寺之内下
る東入、…中略…、寺之内通大
宮東入下る、寺之内通大宮東入1丁目下る)
【補足:同一番号で町域を羅列,不適切なレコード区切り】
このページの先頭へ

住所

市区町村欄に入れるべき文字は、“市・区・町・村のいずれか”ではなく“市区・町・村のいずれか”が正しい(「・」の位置に注意)。しかし、下の例のように区を町域欄に入力してしまう人も多いので、市区町村の入力チェックを行う際は考慮が必要となる。これを読んでいる読者様も、入力例だけを提示された場合、どの入力例が間違っているか指摘できない方も多いであろう。あなたと同じように入力者も間違うとお考えいただければ幸いである。また、「該当地域の居住者は経験的に正しい入力方法を知っている」と考えることも禁物。ここで言う“該当地域”とは“区”のことであり、町や村に比べて人の出入りが激しくなりがちで、“経験”が薄い人も多い。

  都道府県 市区町村 町域・番地
東京都の場合(正しい入力方法): 東京都 中央区 日本橋1-1-1
大阪府の場合(正しい入力方法): 大阪府 大阪市中央区 日本橋1-1-1
大阪府の場合(よくある間違い): 大阪府 大阪市 中央区日本橋1-1-1

ビル名の入力可能文字数は、余裕を持った設計とすべき。“パシフィックセンチュリープレイス丸の内”のような長いビル名もある。

同様に、印刷物のレイアウトも余裕を持った設計にすること。印刷の際に建物名の末尾を切り捨ててはならない。例えば、“ライオンズマンション708号室/鈴木太郎”が“ライオンズマンショ/鈴木太郎”となると、姓のみや無記名の郵便受けが多いので、郵便物などの配送事故の元となる。なお、これを書いている私自身も、前居住者宛ての郵便物に辟易しながらも、同じアパートの住人に氏名を知られるのを嫌って、郵便受けを無記名のままとしている。

町域・番地の入力チェックで“半角禁止”とするのは、利便性を損なう。番地をテンキーで入力した場合、Windowsの標準では半角に変換されるため、入力チェックではじかれることが多い。

半角文字を許可する場合は、データ連携を行う他システムのことも考慮すること。自システムでは問題なくとも、他システムでは半角を許可していない場合もある。

将来的に他システムとのデータ連携が発生しそうな場合は、前もって対象システムと入力形式を一致させておく必要がある。例えば下記の2システムがある場合、システムAからシステムBにデータを送ることは簡単な処理で可能だが、逆にシステムBからシステムAにデータを送るのは困難。それぞれのシステムでの文字列長にも注意すること。

入力項目1 入力項目2 入力項目3 備考
システムA: 都道府県+市区町村 町域・番地 ビル名 都道府県名は47種類しかないので、入力項目1を分割することは容易。したがって、このデータをシステムB向けに加工することも容易。
システムB: 都道府県 市区町村+町域・番地 ビル名 市区町村名は多数あるし合併などもあるため、このデータの入力項目2を市区町村と町域・番地に分割することは困難。したがって、このデータをシステムA向けに加工することも困難。

上記を考えると、都道府県,市区町村,町域,番地,ビル名などは、なるべく分割して入力させるのが無難であると思える。しかし、データの汎用性は高まるものの、入力者側はフォーカス移動の手間が増えることにも留意されたし。入力の手間を省くには、AJAXな住所入力フォーム のようなアプローチも興味深い。

県名をコンボボックスなどで選択させることは、入力者の利便性を損なう恐れがある。コンボボックスから選択するよりも直接入力したほうが早いことが多いし、県名の並び順が直感的でないことも多い。直接入力させるようにして、入力されたデータ(入力形式によっては先頭数文字)がどの都道府県にもマッチしない場合は「都道府県名が間違っています」と表示するのが良い。

道州制の議論が進んでおり、これが実現された場合に都道府県の扱いがどうなるかが不透明である。現在のところ不確定要素が多いため、考慮する必要性は薄いが、今後大幅なシステム変更が必要となる可能性もある。

Wikipediaによると、日本一長い地名は“愛知県海部郡飛島村大字飛島新田字竹之郷ヨタレ南ノ割○○○(25文字+α)”となっている。また、他のサイトでは“京都府京都市上京区智恵光院通り芦山寺上る西入る西社町○○○(26文字+α)”や“京都府京都市東山区三条通南二筋目白川筋西入ル二丁目北木之元町○○○(30文字+α)”が日本一長い住所との情報もある。入力文字数の参考にしていただきたい。なお、蛇足ではあるが“千葉県旭市ロ1番地”が日本一短い地名と言われている。

どの市区町村に属すか決まっていない土地がある。例えば、東京湾の中央防波堤付近の埋立地は、江東区と大田区が帰属を主張している。(2011年現在)

このページの先頭へ

電話番号

市外局番の入力チェックを、“0で始まる2~4桁の数値”とするのは誤り。例えば、東京都小笠原村の市外局番は04998であり、5桁となっている。

2006年2月まで北海道滝上町の電話番号は“015829-XXXX”であり、市内局番が割り当てられていなかった。現在では“0158-29-XXXX”に変更されており、日本すべてで市外局番と市内局番が割り当てられているので、電話番号にハイフンを2つ入力させることに問題はない。しかし、古いシステムからのデータ移行を考えると、“999999-9999”形式への考慮はいまだに必要なものである。

“9999-99-9999”形式で入力する人もいれば、“(9999)99-9999”形式で入力する人もいる。片方の入力形式しか認めない場合は、画面に注釈を入れること。

電話番号を“10桁以下”と限定してはならない。携帯電話の普及に伴い固定電話と契約していないケースが増え、携帯電話番号しか入力できない場合がある。

固定電話の番号は現在では10桁であるため、区切りなりで10桁やハイフン区切りで12桁として入力チェックをするのは問題ない。しかし、神奈川県足柄下郡箱根町・静岡県裾野市茶畑(市外局番0460)や、岐阜県飛騨市神岡町・同県高山市の一部(市外局番0578)など、2007年初頭までは電話番号が9桁である地域があったため、古いシステムからのデータ移行には注意が必要。

固定電話10桁化が完了するまでは、IVR(電話による音声自動案内システム)で電話番号を入力する際に、9桁市外局番用の特例処理を設けるべきであったが、考慮漏れのシステムも多数あった。9桁地区の居住者は、経験的に末尾にでたらめな番号を付与して入力していたものと思われる。9桁目の入力後に一定時間が過ぎたら入力確定とみなすシステムもあったが、この方式だと該当地区の居住者は9桁目の入力後にタイムアウトを待たなくてはならなく、利便性を損ねていた。

市外局番と市区町村の関連チェックはすべきでない。同一の市区町村であっても市外局番が一致するとは限らないし、市外局番が一致しても同一の市区町村であるともとも限らない(他県の場合もある)。また、市区町村が合併されても、電話番号が旧体系のままであることも多い。

このページの先頭へ

メールアドレス

メールアドレスでピリオドを連続して使用したり、「@」直前にピリオドを設定することは禁止されている(RFC2821)。しかし、DoCoMoやauはこの仕様に違反しているため、RFC2821に厳密に準じた入力チェックを行うと、仕様上は正しい入力チェックであるにもかかわらず、一部の携帯電話用メールアドレスが入力できなくなる可能性がある。

携帯電話用メールアドレスの判定は、マスタのメンテナンスコストに注意する必要がある。社名変更前のドメインが現在でも利用可能であるケースだけでなく、i.softbank.jp(iPhone),disney.ne.jp(ディズニーモバイル),bandai.jp(キッズケータイpapipo!)のように近年増えたドメインもある。インターネット上の情報によると、2008年1月2日時点での携帯用ドメインは下記のとおりであるらしい。

現在利用可能な携帯のドメイン一覧と、携帯メアド判定PHPスクリプト より抜粋
em.nttpnet.ne.jp / pipopa.ne.jp / docomo.ne.jp / softbank.ne.jp / ezweb.ne.jp / sky.tu-ka.ne.jp / sky.tkk.ne.jp / sky.tkc.ne.jp / t.vodafone.ne.jp / k.vodafone.ne.jp / d.vodafone.ne.jp / h.vodafone.ne.jp / c.vodafone.ne.jp / r.vodafone.ne.jp / n.vodafone.ne.jp / s.vodafone.ne.jp / q.vodafone.ne.jp / jp-d.ne.jp / jp-h.ne.jp / jp-t.ne.jp / jp-k.ne.jp / jp-r.ne.jp / jp-s.ne.jp / jp-n.ne.jp / jp-q.ne.jp / jp-c.ne.jp / t2.ezweb.ne.jp / t3.ezweb.ne.jp / t4.ezweb.ne.jp / t5.ezweb.ne.jp / t6.ezweb.ne.jp / t7.ezweb.ne.jp / t8.ezweb.ne.jp / t9.ezweb.ne.jp / pdx.ne.jp / dk.pdx.ne.jp / di.pdx.ne.jp / dj.pdx.ne.jp / wm.pdx.ne.jp / bandai.jp

入力チェックを“半角のみ”とするかどうかは、検討が必要。全角文字を入力した場合は入力ミスであることがほとんどだが、今後日本語ドメインが普及すると、全角での入力が増えることが予想される。

Wikipedia - 「メールアドレス」の項 (2011/01/06時点の版)によると、メールアドレスの@より前には数多くの記号が使用でき、ダブルクォーテーションでくくるとさらに多くの記号類が使用可能できるらしい。ただし、これはあくまで規格として許可されている文字であり、実際には、プロバイダサイドで利用可能な記号文字を一部のみに制限している場合が多いとのこと。Wikipediaに記載されていた、「有効なメールアドレス」を以下に引用する。完全な入力チェックを実装するのは、難易度が高いと思われる。

トップレベルドメイン(例:.com / .jp / .net)の有効性チェックは、メンテナンスコストを検討すべき。.info / .biz / .museumのように、近年追加されたドメインがあり、今後も増えることが予想される。また、将来的には自由化される見込みである。→ 参考

このページの先頭へ

日付・時間

祝祭日の判定はハードコーディングすべきでなく、浮動的なものと考えること。以下に、その理由を示す。祝祭日マスタから読み込むのが望ましいが、マスタの更新忘れには注意されたし。

日付 皇室慶弔行事
1959年(昭和34年)4月10日 皇太子・明仁親王の結婚の儀
1989年(平成元年)2月24日 昭和天皇の大喪の礼
1990年(平成2年)11月12日 即位の礼正殿の儀
1993年(平成5年)6月9日 皇太子・徳仁親王の結婚の儀

未来日付や過去日付のチェックは要注意。システム時刻がずれている場合(多くのコンピュータが当てはまる)、深夜0:00近辺で入力エラーと誤認識することがある。サーバサイドで行っている入力チェックはNTPで時刻同期をとることで正確性が保てるが、クライアントサイドのシステム日付はずれている可能性がある。また、“コンピュータ”が正しい時刻を認識していても、“入力者”が正しい時刻を認識しているとは限らない。入力項目によっては、数秒・数分程度の誤差は許容することも検討する価値がある。

うるう年は4年に1回ではない。西暦の年が4で割り切れる年(例:2004年)はうるう年だが、100で割り切れる年(例:1900年)はうるう年ではない。さらに、400で割り切れる年(例:2000年)はうるう年である。

うるう秒があるので、1分間=60秒とは限らない。08:59:59 → 08:59:60 → 09:00:00となることもあるし、08:59:58 → 09:00:00となることもある。ただし、NTTの時報サービスでは、実施日時の100秒前から100分の1秒ずつ時報を調整し、秒の挿入や削除がされることはない。同様に、電波時計やNTPも徐々に調整される。うるう秒に関しては、学術的な項目など以外に関してはシステムに盛り込む必要はないと思われるが、参考として記載した。

このページの先頭へ

クレジットカード番号

カード番号の桁数は16桁とは限らない。ビザやマスターは16桁だが、アメックスは15桁でダイナースは14桁である。さらに、ビザでは13桁のカードが発行されていた時代もある。

同様に、カード番号が4つに区切られているとも限らない。ビザやマスターは“9999 9999 9999 9999”形式(4桁-4桁-4桁-4桁)だが、アメックスは“9999 999999 99999”形式(4桁-6桁-5桁)、ダイナースは“9999 999999 9999”形式(4桁-6桁-4桁)で、3つに区切られている。下図「良い例」のように、1つのテキストボックスに入力させると良い。

良い例 (桁区切りをしない)画像:カード番号入力欄が1箇所にまとまっている。 悪い例 (桁区切りの数が不適当)画像:カード番号入力欄が4つに分かれている。

有効期限の末尾2桁を“月”と解釈して、1~12とするのは誤り。クレジットカードには“月/年”の順に刻印されている。「月/年の順に入力してください」のように画面に注釈を表示すると良い。

このページの先頭へ