メニュー

電話番号の国番号と地域: 市外局番から地域を推定できるか

電話番号の国番号は一〜三桁で、市外局番から地域を推定できる場合もあります。ただし携帯番号は地域と結び付かず、番号ポータビリティで引っ越しても番号は変わりません。

公開日

  • 電話番号
  • テストデータ

電話番号の国番号は、国際電話をかけるときに最初に押す一〜三桁の符号です。住所の国と電話番号の国番号は、多くの場面で同じ組み合わせになります。しかし、この対応を検証の規則にしてしまうと誤判定が増えます。どこまで推定できて、どこから推定できないのかを整理します。

国番号と住所の国は一致するのか?

一致しない場合があります。国番号は加入している電話網の国を表し、住所は居住地を表します。この二つは通常そろいますが、常にそろうとは限りません。

国境をまたいで通勤する人、赴任中の人、二か国に拠点を持つ人は、住所の国と電話番号の国が食い違います。また、会社の代表番号を本社の国に置き、支店が別の国にある場合も同じです。

したがって、住所の国と電話番号の国番号の不一致を、そのまま入力の誤りとして扱うのは危険です。警告として提示するに留め、登録自体は妨げない設計が現実的です。

市外局番から地域を推定できるのか?

固定電話については、ある程度推定できます。市外局番は地域ごとに割り当てられており、番号の前半を見れば、その番号がどの地域に属するかを絞り込めます。

ただし、推定には限界があります。まず、国番号の桁数が一桁から三桁まで幅を持つため、番号のどこからが国内部分なのかを切り出す処理が必要です。国番号の一覧を持たずに先頭の数字を数えると、切り出しの位置を誤ります。

次に、同じ国でも市外局番の桁数が一定でない場合があります。市外局番と市内局番の境目が番号によって変わる国では、文字列の位置だけでは分けられません。

そして、地域の区割りは変更されます。市外局番が統合されたり、新しい番号が追加されたりします。過去の番号が現在の区割りと一致しないことがあります。

推定が難しくなる要因は、次のとおりです。

  • 国番号の長さが国ごとに異なり、国内部分の切り出し位置が定まらない
  • 同じ国でも市外局番の長さが一定でない場合がある
  • 市外局番と市内局番の境目が、番号によって変わる国がある
  • 地域の区割りが変更され、過去の番号が現在の区割りと一致しないことがある

携帯番号は地域を表すのか?

表しません。多くの国では、携帯電話の番号は地域と結び付いていません。加入者の住所がどこであっても、事業者が割り当てた番号がそのまま使われます。

同じことは、固定電話から携帯電話へ移行した番号にも当てはまります。番号ポータビリティの仕組みにより、引っ越しても、事業者を変えても、番号をそのまま持ち続けられます。結果として、市外局番が示す地域と、実際にその番号を使っている人の居所は、無関係になり得ます。

このため、住所から電話番号の地域を推定する処理は、携帯番号では機能しません。そもそも携帯かどうかの判別自体が、国によっては番号の形式からは難しい場合があります。

テスト用の電話番号はどう用意するのか?

実在の番号を使ってはいけません。テストの値が実在の番号であれば、その番号の持ち主と無関係な文脈で呼び出しが行われたり、記録に残ったりする可能性があります。通話やメッセージの送信を試すテストでは、実際に発信が飛ぶことがあります。

各国の電話網には、物語や映像のなかで使うために確保された番号の範囲があります。こうした範囲は、実際の加入者に割り当てられていないため、試験用の値として適しています。ただし、どの範囲がそれに当たるかは国ごとに違い、すべての国に用意されているわけでもありません。確実な範囲が分からない国では、書式だけをまねた合成の番号を使い、発信を伴うテストには回さないようにします。

用意すべき値は、国番号の桁数が一桁、二桁、三桁のそれぞれについて一件ずつです。切り出しの位置を誤る不具合は、桁数の違う値を並べたときに初めて現れます。加えて、固定電話の番号と携帯電話の番号を一件ずつ、そして先頭にゼロを持つ国内形式の番号を一件用意します。

開発者向け: 電話番号欄の扱い

保存する型は文字列にします。国際的な番号は先頭に符号が付き、桁数も国ごとに違います。数値として保存すると、先頭のゼロや符号の表現が失われます。

国番号と国内部分は、別々の欄に分けて持つか、一つの文字列として持つかを選びます。分けて持つと表示や絞り込みが楽になり、一つで持つと入力された表記をそのまま残せます。両方を持つ場合は、どちらが正なのかを決めておきます。

検証では、まず国番号の一覧を参照して切り出し、残りの部分の桁数が国の規則に収まるかを見ます。ここでも規則は表として外に出し、コードに書き込まないようにします。国ごとの符号を扱う考え方はISO 国家コードと行政区コードと共通です。

地域の推定は、行うとしても補助的な情報として扱います。推定結果を保存の必須項目にしたり、住所の行政区を自動で埋めたりしないでください。誤った値が確定してしまうと、あとから人が気づく手立てがありません。

四つめは、表示の形式です。国ごとに区切り記号の位置や空白の入れ方が違います。区切りを入れて見せるのは表示の段階に限り、保存する値は入力に近い形のまま残します。

検証より疎結合にする

住所と電話番号は、それぞれ別の規則で成り立っています。両者を結び付ける規則を強くすると、片方の変更がもう片方を壊します。住所の国を変更したときに電話番号も変更を強制する画面は、利用者にとって負担になります。

結び付けるなら、片方向の参考情報に留めます。住所の国と電話番号の国番号が違うときに、確認を促す表示を出す。ここまでが適切な距離です。フォーム全体の検証項目は海外向けの住所フォームのテスト観点にまとめています。

次のステップ

まず、自分の実装が電話番号を数値で保存していないかを確認してください。数値なら、先頭のゼロを持つ番号が壊れている可能性があります。次に、住所の国と電話番号の国番号が違う値を投入し、登録が妨げられないかを試します。国ごとの番号の形を確かめたいときはランダム住所生成で国を切り替えると、その国の電話番号の例を住所と並べて確認できます。

続けて読む

ランダム住所生成の関連記事