POS 関連業務用関数 ( JAN コードのチェックディジット )

バーコードのチェックデジット(C/D:チェックディジット)の算出 (JAN、ITF コード共用)

バーコードなどで使用されている JAN コードのチェックデジットを計算する。(モジュラス 10/ウェイト3)
それぞれのコード長は色々と種類があるようで最大長もわからないので個別にインプリメントしてください。 PLS_INTEGER で計算できる範囲内であるとは思います。
JAN のチェックデジットの計算方法は、一般財団法人 流通システム開発センター で解説されています。 (ちなみ、流通システム開発センターは日本のバーコードの一元管理などを行っているところです。) 書籍 JAN、雑誌 etc コードなどもモジュラス 10/ウェイト 3 のようです。(数点ですが手持ちのもので動作確認してみました。)

CREATE OR REPLACE FUNCTION RIVUS.CD_MOD10_WEIGHT3(P_CODE IN VARCHAR2)
RETURN NUMBER
IS
	vWeight PLS_INTEGER;
	vSum    PLS_INTEGER;
BEGIN
	vWeight := 3;
	vSum := 0;
 
	FOR i IN REVERSE 1..LENGTH(P_CODE)
	LOOP
		vSum := vSum + vWeight * CAST(SUBSTR(P_CODE, i, 1) AS PLS_INTEGER);
		vWeight := 4 - vWeight; -- 1 と 3 のフリップフロップ
	END LOOP;
	RETURN (10000 - vSum) MOD 10;
END;
/

入力したコードが数値で無い場合や NULL の場合には VALUE_ERROR 例外 が発生する。

 


関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)