いくつかのパラメーターを、短くて予測不可能なスペル可能なコードにグループ化する必要があります。元:
- シリアル:WJ-JHA5JK7E9RTAS
- 日付: 2013 年 4 月 2 日
- 日: 30
- 有効: 真
圧縮されたコードは次のようになります: 3xy9b0laiph3s
私の目標は、コードをできるだけ短くすることです (もちろん、情報を失うことはありません)。アルゴリズムは、他の言語でも簡単に実装できる必要があります (そのため、狂った特定の依存関係を持つことはできません)。何かご意見は?
いくつかのパラメーターを、短くて予測不可能なスペル可能なコードにグループ化する必要があります。元:
圧縮されたコードは次のようになります: 3xy9b0laiph3s
私の目標は、コードをできるだけ短くすることです (もちろん、情報を失うことはありません)。アルゴリズムは、他の言語でも簡単に実装できる必要があります (そのため、狂った特定の依存関係を持つことはできません)。何かご意見は?
任意の短い文字列の場合、圧縮の一般化された予測方法を適用するには十分な情報がありません。
データの既知の機能を活用する必要があります。
例:
これは 104 ビットで、Base64 で 18 文字にエンコードできます
多くの場合、シリアル番号にはチェックサム文字が 1 つまたは 2 つあることに注意してください。チェックサムの計算方法がわかっている場合は、この文字を省略して、デコード時に再計算できます。これにより、ここで Base64 数字を節約できます。
重い暗号化を心配することなく、結果を予測しにくくしたい場合は、エンコードされた文字列を決定論的にシャッフルすることができます。
ほとんどの場合、これはデータをどこかに保存し、圧縮して使用する ID を作成することで処理されます。このシステムの最も一般的なユーザーは、短い URL サイトです。
コード:
$id = 23590;
print $id;
$hash = base_convert($id, 10, 32);
print $hash;
$id = base_convert($hash, 32, 10);
print $id;
UUencodeまたはBase64ですが、これらのコーディングの場合は一致します。最終的には、目的に合わせてこれらのコーディングを編集できます(小文字のみ)。まったく同じ量のデータがある場合、これが最も簡単な解決策になります。しかし、最小限のものではありません。