登録番号チェッカー

インボイスの登録番号(T + 13桁)の形式と、法人番号のチェックディジットを確認します。 全角数字・ハイフン・小文字の t は自動で正規化します。

例: T8700110005901(国税庁の公表資料に載っている検算例)

チェックディジットが「不一致」でも無効とは限りません

登録番号は T + 13桁で、法人の場合は13桁が法人番号と一致します。 法人番号にはチェックディジットがあるため検証できますが、 個人事業者の登録番号は法人番号ではなく、この規則に従いません。

したがって実装では、

と分けるのが安全です。不一致を理由に登録を弾く実装は、個人事業者を排除してしまいます。

計算式(国税庁 法人番号公表サイト)

下12桁を P1..P12(最下位が P1)とする
Qn = 1(n が奇数)/ 2(n が偶数)
チェックディジット = 9 −(Σ(n=1..12) Pn × Qn) mod 9

公表資料の検算例: 基礎番号 700110005901 → 偶数桁の和 13、奇数桁の和 11、 13 × 2 + 11 = 37、37 mod 9 = 1、9 − 1 = 8 → 法人番号 8700110005901。

プログラムから使う

use Foovar\JpInvoice\Validation\RegistrationNumber;

$number = RegistrationNumber::fromString('t8700110-005901');  // 小文字・ハイフンも正規化
$number->value;                        // 'T8700110005901'
$number->matchesCorporateNumberRule();  // true

RegistrationNumber::calculateCheckDigit('700110005901');  // 8

foovar/jp-invoice — インボイス対応の消費税計算ライブラリ(MIT・無料)

composer require foovar/jp-invoice
登録番号の検証のほか、端数処理・記載事項の検証・返還インボイス・経過措置に対応。 GitHub / 端数処理のデモ / 実装ガイド