Location : Home > Languages > Perl > Package
Title : Algorithm::Verhoeff
Toolbox Logo

名称

 Math::Spline - Verhoeff チェックディジットの計算


概要

use Algorithm::Verhoeff;
my $long_number = 1456789;
# typos を発見するためにチェックディジットを追加

$long_number .= verhoeff_get($long_number); # note - append don't add!
print $long_number; # 14567894 を出力

# 正確に打てたかどうか確認してみよう
my $test = '14657894'; # あらら。
unless (verhoeff_check($test))
{
   print "Failed check - typo?";
}

説明

 本パッケージは Verhoeff チェックディジットアルゴリズム(Verhoeff check digit algorithm)を実装している。これは数値の列に対し、入力ミスを確認するために1桁のチェックサムを追加するものである。数字の入れ替わりや欠損や2重打ちなどよくあるミスを見つけてくれる。

エクスポート

 デフォルトでは本モジュールは以下の2つの関数を現在のパッケージに組み込む。

verhoeff_check()
verhoeff_get()

使用方法

  Verhoeff チェックを通過した数値を用いることはコードの生成などに有効である。ミスタイプなどをした場合にはこのチェックを合格することができないからである。これには打ち忘れ・重複・入れ替えなどよくある Typo を含む。1桁追加するだけであるので人間が入力するにも読むにも有用なアルゴリズムである。
 我々が「数値(number)」と言うとき、実際には「数値の列(string of digits)」をさしているわけなので、 Verhoeff アルゴリズムがよく作動する。

 このような数値を生成するためには、まず元の数値を指定し、チェックディジットを取得するために verhoeff_check() を呼び出し、元の数値の最後にそのディジットを追加する。最初の数値に数学的に足してはいけない。

 新しい数値か否かを確認するにも verhoeff_check() を用いる。言い換えれば verhoeff_check() が新しい数値を引数として呼びだされると 1 を返す。元の数値のミスタイプした数値を引数に呼び出すと 0 を返す。打ち忘れなどの typo のよくある形態であれば正確さは 99% 以上である。

verhoeff_get($number)

 verhoeff_get は数値または文字列を引数とし 0 から 9 の間のチェックディジットを返す。

verhoeff_check($number)

 verhoeff_check は数値または文字列を引数とし、合格すれば 1 を返し、そうでなければ 0 を返す。


警告

 双方の関数とも内部で引数を文字列に変換している。大きな数(32 bit以上)では Perl 表現のためにエラーになることがある。これを回避するには数値を文字列として宣言するかまたはプログラム中で bignum モジュールを使用してほしい。
 たとえば

my $num = 57382957482395748329574923; # 大整数がくると
verhoeff_get($num); # bignum モジュールを使わない限り致命的なエラーが出る.

しかし

my $num = '57382957482395748329574923'; # 長い文字列だと
verhoeff_get($num); # うまく行く

参考資料

 bignum


著者

 Jon Peterson (jon -at- snowdrift.org)


著作権とライセンス

 Copyright (C) 2004 by Jon Peterson

 本ライブラリはフリーソフトウェアであり、Perl 本体と同等の条件で修正/再配布してもよい。Perl は version 5.8.4 またはユーザの選択で Perl 5 の以降のバージョンで利用可能である。

Toolbox Logo
Updated : 2006/08/30