2007/05/17

ezmlm+MySQL: Rubyでhash値を計算

こんなの見つけた。
DZone Snippets > ezmlm
addressにメールアドレスを与えて,以下のコードでezmlmのlistで使われるhash値を計算できる。

address.downcase.split('').inject(5381) { |h,c| ((h + (h << 5)) ^ c[0]) % (2 << 31) } % 53


PHPだと最初からezmlm_hashってのがあるらしい。

putsubs.cを参照すると、ezmlm-listを実行したときのqueryは
SELECT address FROM table WHERE hash BETWEEN 0 AND 52;

となってる。unsubscribeしたときに
DELETE FROM table WHERE address = 'address' AND hash = hash AND between 0 AND 52;

が実行されるんだけども(subscribe.c)、ソースをいじって
UPDATE table SET hash = 127 WHERE address = 'address' AND hash = hash AND between 0 AND 52;

とか53以上の値にしておけば配信リストから外れるけども、hashとaddress以外のcolumn(姓名、所属組織等)を設定していても当該レコードが削除されなくて運用上いいかも。

0 件のコメント: