【Perl】文字列をハッシュ関数でハッシュ値に変換
2013-06-04-1
[Algorithm][Programming]
自分用メモ。
任意の文字列をハッシュ値に変換する。
ハッシュ関数のサンプルとして。
■コード(hash-function.pl):
■実行結果:
ハッシュ値は32ビット。
ハッシュサイズは32ビットで表せる整数に近い素数[2006-08-15-2]。
任意の文字列をハッシュ値に変換する。
ハッシュ関数のサンプルとして。
■コード(hash-function.pl):
#!/usr/bin/perl
use strict;
use warnings;
use Encode;
use utf8;
binmode STDOUT, ":utf8";
my $t = "これは This is ペン a pen デスね。東京タワーに行きましたYO";
my $hv = str2hv($t);
print "$t\n";
printf "%08X\n", $hv;
sub str2hv {
my ($t) = @_;
$t = Encode::encode_utf8($t) if utf8::is_utf8($t);
my $hv = 0;
my $hash_size = 4294967291;
foreach my $c (split(//, $t)) {
my $n = unpack("C", $c);
$hv = ($hv * 256 + $n) % $hash_size;
}
return $hv;
}
■実行結果:
% ./hash-function.pl これは This is ペン a pen デスね。東京タワーに行きましたYO 4C2F3B05
ハッシュ値は32ビット。
ハッシュサイズは32ビットで表せる整数に近い素数[2006-08-15-2]。
