「
創廃業ダッシュボード」で使う法人番号。体系が気になって「
法務局サイト」と「
会社法人等番号」を元に、パーサーを実装。
「法人番号パーサー」
法人番号は13桁ですが、先頭1桁はチェックデジット、後ろ12桁から計算できるので実は不要です。(src on GitHub)
// https://www.houjin-bangou.nta.go.jp/documents/checkdigit.pdf
const isValid = (s) => {
s = s.toString();
if (s.length != 13) {
return false;
}
return s[0] == calcCheckDigit(s.substring(1, 13));
};
const calcCheckDigit = (s) => {
if (s.length != 12) {
return null;
}
let n1 = 0;
let n2 = 0;
for (let i = 0; i < 12; i += 2) {
n1 += parseInt(s[i]);
n2 += parseInt(s[i + 1]);
}
const c = 9 - (n1 * 2 + n2) % 9;
return c;
};
export { isValid, calcCheckDigit };
チェックデジットの計算、プログラムの練習によいですね。軽くテストコードを書いて、deno test でチェック!
import * as t from "https://deno.land/std/testing/asserts.ts";
import { isValid } from "./CheckDigit.js";
Deno.test("simple", () => {
t.assert(isValid("8700110005901"));
t.assert(!isValid("8700110005902"));
});
残り、12桁の内訳は、先頭4桁が主に登記所を表し、次の2桁で種別、残り6桁が通し番号や、地方公共団体コードなどとなっています。
「日本で登記されている外国の企業一覧」
種別401を全部取得したところ、現在全9593社ありました。
import { GBizINFO } from "./GBizINFO.js";
import { CSV } from "https://js.sabae.cc/CSV.js";
const gbiz = new GBizINFO();
const data = await gbiz.getBasicByKind(401); // 外国企業 9593社 2021-09-16
data.forEach((d) => d.cityID = d.cityID ? d.cityID.substring(d.cityID.length - 5) : "");
data.sort(gbiz.filterByCorporateID);
console.log(JSON.stringify(data, null, 2), data?.length);
await Deno.writeTextFile("data/foreigns.csv", CSV.stringify(data));
(src on GitHub)