これはルビー固有の問題というよりも一般的な問題です。たまたまルビーでやっているだけです。Base62 (0-9a-zA-Z) などの文字セットを使用して、文字列を Integer/Long/Bigint、または任意の名前に変換しようとしています。
問題は、「0ab」のような文字列を整数に変換しようとすると、その整数が「ab」になる文字列に戻されることです。これは、アルファベットの最初の文字から始まるすべての文字列で発生します。
同じ問題がある実装例を次に示します。
https://github.com/jtzemp/base62/blob/master/lib/base62.rb
実際に:
2.1.3 :001 > require 'base62'
=> true
2.1.3 :002 > Base62.decode "0ab"
=> 2269
2.1.3 :003 > Base62.encode 2269
=> "ab"
私は明らかなことを見逃しているかもしれません。
その例外なしで双方向に変換するにはどうすればよいですか?