検索しても、あまり良さそうなサイトが見つけられなかったため、こちらのサイトの「GTIN(JANコード)標準タイプ(13桁)のチェックデジットの計算方法」を参考に作成しました。
コード
const createFakeJanCode = () => {
// 12桁のランダムな数字の文字列を生成
const randomString = Math.random().toString(10).slice(-12);
// ランダムな数字の配列
const numberArray = [...randomString].map(Number);
// 奇数番目の要素の合計①
const oddSum = numberArray
.filter((_, index) => index % 2 === 1)
.reduce((sum, nextValue) => sum + nextValue);
// 偶数番目の要素の合計②
const evenSum = numberArray
.filter((_, index) => index % 2 === 0)
.reduce((sum, nextValue) => sum + nextValue);
// ①x3+②の数の一桁目
const firstDigit = +`${oddSum * 3 + evenSum}`.slice(-1);
// 10を引いた数の一桁目がチェックデジットとなる
const checkDigit = `${10 - firstDigit}`.slice(-1);
return `${randomString}${checkDigit}`;
};
const fakeJanCode = createFakeJanCode();
// (例)4022583207511
注意点ですが、参考サイトで
① すべての偶数桁の数字を加算します。
② ①の結果を3倍します。
とあり、ついついindex % 2 === 0
で求めたくなりますが、配列のfilter
メソッドのindex
は0
から始まるため、奇数番目の合計を3倍する必要があります。
参考サイト
最後に
GoQSystemでは一緒に働いてくれる仲間を募集中です!
ご興味がある方は以下リンクよりご確認ください。