はじめに
法人番号と付番の仕組みとチェックディジットについて調べており計算方法等まとめました。
法人番号とは
法人番号は国税庁が指定する13桁の数字を指します。
基本的に法人と呼ばれる団体には法人番号が割り振られています。
法人番号は国税庁の法人番号公表サイトから確認することができます。
法人番号は全部で13桁ですが、12桁の "基礎番号" と1桁の "検査用数字" により構成されています。
また、12桁の "基礎番号" は法人等の区分によって番号の構成が定められています。
例えば、"地方公共団体" であれば以下のような構成となっています。
- 1桁~6桁までが 一連番号
- 7桁、9桁~12桁が
0
- 8桁が
3
ちなみに、株式会社FoundingBaseの法人番号は、4011001098993
です。
法人番号のチェックディジット
法人番号のチェックディジット(13桁目)は以下の数式で算出することが可能です。
$$
9 - \left( \sum_{n=1}^{12} P_n \times Q_n \mod 9 \right)
$$
- $P_n$ 基礎番号の最下位の桁を1桁目としたときの
n
桁目の数字 - $Q_n$
n
が奇数のとき1
、n
が偶数のとき2
JavaScript で計算する場合
var corporateNumber = '法人番号';
var checkDigit = Number(corporateNumber.substring(0, 1));
var basicNumberArr = corporateNumber.substring(1).split('').map(Number);
var evenBasicNumber = basicNumberArr
.filter((_, i) => i % 2 === 0)
.reduce((acc, cur) => acc + cur, 0);
var oddBasicNumber = basicNumberArr
.filter((_, i) => i % 2 === 1)
.reduce((acc, cur) => acc + cur, 0);
var calculatedCheckDigit = 9 - ((evenBasicNumber * 2 + oddBasicNumber) % 9);
検算
実際に 株式会社FoundingBaseの法人番号 4011001098993
で計算したチェックディジットが正しいか確認してみます。
var corporateNumber = '4011001098993';
// '4011001098993'
var basicNumberArr = corporateNumber.substring(1).split('').map(Number);
// [ 0, 1, 1, 0, 0, 1, 0, 9, 8, 9, 9, 3 ]
var evenBasicNumber = basicNumberArr
.filter((_, i) => i % 2 === 0)
.reduce((acc, cur) => acc + cur, 0);
// 18
var oddBasicNumber = basicNumberArr
.filter((_, i) => i % 2 === 1)
.reduce((acc, cur) => acc + cur, 0);
// 23
var calculatedCheckDigit = 9 - ((evenBasicNumber * 2 + oddBasicNumber) % 9);
// 4
検算の結果13桁目の数字と同一であることが確認できました。
Ref