Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Validate Swedish VAT Numbers in Node.js

2026年10月23日に「Dev.to」が公開したITニュース「Validate Swedish VAT Numbers in Node.js」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

スウェーデンVAT番号は「SE+10桁+01」形式で、Node.jsで検証できる。この10桁の3桁目で会社か個人事業主かを判別可能。VATの有効性はVIESが決定し、Bolagsverketは会社情報などの補足に使う。VIESが停止しても、Bolagsverketで代替して有効性を判断することはない。

出典: Validate Swedish VAT Numbers in Node.js | Dev.to公開日:

ITニュース解説

ソフトウェア開発において、国や地域固有のルールに基づいてデータを検証することはよくある。特に税務に関するID、例えば付加価値税(VAT)番号の検証は、国際取引を行うシステムで非常に重要になる。ここでは、スウェーデンにおけるVAT番号の検証方法について、その特殊性と実践的なアプローチを解説する。システムエンジニアを目指す人にとって、このような複雑な要件をどう紐解き、どのようにシステムに組み込むかの一例として理解を深めてほしい。

スウェーデンのVAT番号は、他の多くのEU諸国とは異なり、単なる税務署が付与する任意のIDではない。これは、企業の登録番号である「organisationsnummer」から直接構築されているという特徴がある。このため、VAT番号を見るだけで、その会社が法人であるか、あるいは個人事業主の個人識別番号に基づいているか、さらにはその登録番号自体も推測できる。

スウェーデンVAT番号の基本的な形式は、「SE」という国コードに始まり、その後に10桁の数字が続き、最後に「01」という固定の接尾辞が続く。例えば、「SE556677889001」という形をしている。ここで、「SE」はスウェーデンを示す国コード、真ん中の10桁が「organisationsnummer」(法人登録番号)または「personnummer/samordningsnummer」(個人識別番号)、そして「01」は常に固定で使われる接尾辞である。この「01」は、連番ではなく常にこの値である点に注意が必要だ。したがって、プログラムでこの形式をチェックするには、^SE\d{10}01$のような正規表現を使うことで、入力が正しい形をしているかを確認できる。

検証の最初のステップは、まさにこの「形式のチェック」である。入力されたVAT番号からスペースやハイフンなどの不要な文字を取り除き、すべて大文字に変換して標準化する。この際、「厳格(strict)モード」と「寛容(lenient)モード」の二つの処理方法が考えられる。厳格モードでは、「SE」から始まる完全な形式の入力のみを正しいとみなすが、寛容モードでは、ユーザーが「SE」を省略して12桁のローカル部分だけを入力した場合でも、プログラムが自動的に「SE」を補って正しい形式に整形してくれる。このステップは、入力された文字列が物理的にVAT番号としてあり得る形をしているかを確かめるだけで、それが実際に税務登録されているかどうかの真偽はまだ判断しない。

次に、スウェーデンVAT番号の最も重要な特徴の一つである「organisationsnummer」と「personnummer」の区別について考える。真ん中の10桁の数字が、法人(企業)の登録番号である「organisationsnummer」なのか、それとも個人事業主の個人識別番号である「personnummer/samordningsnummer」なのかを識別する必要がある。この区別は、10桁の数字の「3桁目」を見ることで可能だ。もし3桁目が「2」以上であれば、それは法人(organisationsnummer)である。一方、3桁目が「0」または「1」であれば、それは個人事業主の個人識別番号(personnummer/samordningsnummer)に基づいていることを意味する。この判別は非常に重要で、個人事業主の個人情報を企業の登録情報として誤って扱わないようにするために使われる。システムが企業の登録コードを求められた場合、個人識別番号が渡されないようにするための安全策となるのだ。

VAT番号の実際の有効性を確認するためには、外部APIを利用する。具体的には、欧州連合全体でVAT登録情報を管理するVIES(VAT Information Exchange System)というシステムが、VAT番号の有効性を判断する唯一の情報源となる。vatnode.devのようなサービスは、このVIESに問い合わせる機能を提供してくれる。APIを呼び出すと、VAT番号が有効であるかどうか、関連する会社名や住所などの情報が返される。この「有効性」の判断はVIESが下すものであり、他のいかなる情報源もその代わりにはならない。

さらに、VIESだけでは得られない追加の企業情報も存在する。例えば、会社の登録日、会社形態、業種、現在の会社ステータスなどだ。これらの情報は、スウェーデンの企業登録庁である「Bolagsverket」が管理しているデータから取得される。vatnode.devは、VIESによる検証が成功した後に、このBolagsverketのデータを利用して情報を「補完(enrichment)」してくれる。しかし、ここで重要なのは、このBolagsverketのデータはVAT番号の「有効性」を判断するものではないという点だ。Bolagsverketはあくまで企業登録の情報を提供するものであり、VAT登録の状態とは直接関係がない場合がある。そのため、もしVIESが一時的に利用できない状況になったとしても、Bolagsverketのデータを使ってVAT番号が有効であると判断してはならない。システムはVIESの利用不可を正直に伝えるべきであり、推測で判断を下すべきではない。また、Bolagsverketから得られる会社ステータスは企業登録の状態を示し、VAT登録の状態とは異なる可能性があるため、両者を独立した情報源として扱う必要がある。業種に関する情報も、時には英語で、時にはスウェーデン語で提供される場合があるため、表示やフィルタリングの際には注意が必要だ。

これらのステップを組み合わせた全体の検証プロセスは、まず入力されたVAT番号の形式を検証し、次にVIES APIを呼び出して有効性を判断する。VIESが「有効」と回答し、かつVAT番号が法人(organisationsnummer)に基づいている場合にのみ、Bolagsverketからの追加情報で補完するという流れになる。個人事業主の番号の場合、個人情報保護の観点からBolagsverketへの問い合わせは行わない。

検証結果をデータベースに保存する際には、VAT番号そのものに加えて、それが法人(organisationsnummer)に基づいているのか、個人事業主(personnummer)に基づいているのか、そしてVIESによる有効性判断の結果などを記録する。個人事業主の会社名や住所といった情報は個人情報に該当するため、保存の目的と期間を明確にし、慎重に取り扱う必要がある。

開発者がよく陥る間違いとしては、VAT番号の末尾「01」を連番だと誤解すること、3桁目が「2」未満だからといって番号が無効だと判断すること、VIESが使えないときにBolagsverketで有効性を推測すること、業種情報が常に英語だと仮定することなどが挙げられる。これらはすべて、スウェーデンVAT番号の特殊性や、VIESとBolagsverketの役割の違いを理解していないことから生じる誤解であるため、明確に区別して設計・実装することが重要となる。これらのポイントを理解することで、より堅牢で正確なシステムを構築できるだろう。

関連コンテンツ

関連IT用語