はじめに
OracleのPL/SQLでモジュラス11ウェイト2~7(M11W2~7)方式でチェックディジットを計算する関数を実装してみました。
サンプルプログラム
CREATE OR REPLACE FUNCTION MOD11WEIGHT27(P_CODE IN VARCHAR2) RETURN NUMBER IS vWeight PLS_INTEGER; vSum PLS_INTEGER; BEGIN vWeight := 2; vSum := 0; FOR i IN REVERSE 1..LENGTH(P_CODE) LOOP vSum := vSum + vWeight * CAST(SUBSTR(P_CODE, i, 1) AS PLS_INTEGER); vWeight := vWeight + 1; -- ウエイトが7を超えたら元に戻す IF (vWeight = 8) THEN vWeight := 2; END IF; END LOOP; -- あまりがゼロなら0 IF (vSum MOD 11 = 0) THEN RETURN 0; END IF; -- あまりが1なら0 IF (vSum MOD 11 = 1) THEN RETURN 0; END IF; -- 11 から 総和÷11のあまりを引く RETURN 11 - (vSum MOD 11); END; /
実行結果
BEGIN DBMS_OUTPUT.PUT_LINE('check digit::' || MOD11WEIGHT27(123456789)); END; / >2
関連記事