任意の文字列を取得し、それをハッシュ関数(MD5など)で実行して、結果のダイジェストをbase-36で解釈できるようにしたいと思います。
Rubyにはすでにダイジェストライブラリが存在することは知っていますが、私が知る限り、ダイジェストの生のバイトを取得することはできません。to_s
関数は、もちろんベース16であるにマップされますhexdigest
。
Fixnum#to_sは、引数としてベースを受け入れます。string#to_iもそうです。このため、16進数の文字列からintに変換してから、36進数の文字列に変換できます。
i = hexstring.to_i(16)
base_36 = i.to_s(36)
Digest :: Class#digest:を使用して生のダイジェストバイトにアクセスできます。
Digest::SHA1.digest("test")
# => "\xA9J\x8F\xE5\xCC\xB1\x9B\xA6\x1CL\bs\xD3\x91\xE9\x87\x98/\xBB\xD3"
残念ながら、その時点から、Sammy Larbiの回答のように、最初に別の番号ベースを経由せずにbase36に入れる方法がわかりません。
bytes = Digest::SHA1.digest("test")
Digest.hexencode(bytes).to_i(16).to_s(36)
うまくいけば、rawバイトからbase36に移行するためのより良い方法を見つけることができます。