従来の自動インクリメントされた数値IDの代わりに、PHPやAS3などで英数字IDを生成するにはどうすればよいですか。
たとえば、YouTubeはこれをビデオIDに使用します。Facebookは、アップロードされた画像名などの長い英数字の文字列を生成します。
編集: 文字列自体を生成する方法ではありませんが、MySQL列のauto_increment列のように一意の文字列を生成するにはどうすればよいですか?
従来の自動インクリメントされた数値IDの代わりに、PHPやAS3などで英数字IDを生成するにはどうすればよいですか。
たとえば、YouTubeはこれをビデオIDに使用します。Facebookは、アップロードされた画像名などの長い英数字の文字列を生成します。
編集: 文字列自体を生成する方法ではありませんが、MySQL列のauto_increment列のように一意の文字列を生成するにはどうすればよいですか?
一意性を保つための最良の方法は、ミリ秒単位の現在の時刻/日付を乱数と組み合わせることです。UUID
を見てください
http://en.wikipedia.org/wiki/Universally_unique_identifier
YouTubeの文字列のようには見えませんが、非常にユニークです
一意性を保証するには、サーバー側でIDを考え出す必要があります。次に、たとえば、次の番号を取得するために使用するMySQLセルにすることができます。64ビットの数値を使用している場合は、JavaScriptファイルに常に埋め込む必要がある場合は、最終的に一意のIDが必要かどうかに関係なく、ページの読み込み時に数値を生成することもできます。次に、たとえばユーザーがデータを保存する場合、送信されたIDを一緒に保存できます。カウンターが確実にインクリメントしている限り、未使用のID番号を保持する必要はありません。したがって、MySQLを使用すると、保存している実際のデータに加えて、常に1つのセルをインクリメントする必要があります。
64ビットを使用すると、IDが不足することはなく、次のIDがどうなるかを予測しにくくしたい場合は、ビットを並べ替えることができます。何らかのセキュリティが必要な場合は、実行中の数値から予測しにくい数値への1:1マッピングを詳しく調べる必要があります。
増分数を保持する場所については、任意のSQLデータベースの行、またはロックを処理する場合は単純なテキストファイル、またはサーバー上で常にプログラムを実行できる場合は、任意の種類のIPCを使用して通信できます。新しい番号を取得します。サーバーが再起動した場合、シーケンスが少なくとも残された場所から続行されることを確認してください。
PHP では、base_convertを使用してより大きな基数に変更できます (最大 36、形式は 0-9a-z、a は 10 など)。
よろしく、 アリン
AS3
import mx.utils.UIDUtil;
var uuid:String = UIDUtil.createUID()
PHP
$unique = md5( uniqid() ); // 32 characters long
$unique = sha1( uniqid() ); // 40 characters long