v4 UUID を生成するための PHP の既存の関数には、v4 標準の特定の形式への準拠を保証する点で欠陥があります。標準では、9 番目のオクテットの上位ビットと予約ビットは 10 である必要があると指定されています。
原因は、関数によるこれらのビットの一貫性のない処理です。これを修正するには、RFC 4122 セクション 4.4 に従って特定の変更を行う必要があります。
以下の洗練された関数は、必要な調整を実装しています。
function uuidv4() { $data = random_bytes(16); $data[6] = chr(ord($data[6]) & 0x0f | 0x40); // set version to 0100 $data[8] = chr(ord($data[8]) & 0x3f | 0x80); // set bits 6-7 to 10 return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4)); }
データはrandom_bytesを使用して生成され、ランダム性とセキュリティが保証されます。後続の 16 進変換では、vsprintf を利用して適切な形式を維持します。
7.0 より前の PHP バージョンでは、random_bytes が利用できないため、代替実装が提供されています。
$data = openssl_random_pseudo_bytes(16, $strong); // ensure the result is cryptographically strong assert($data !== false && $strong);
暗号化を使用することが重要ですUUID の堅牢性を保証する、random_bytes や openssl_random_pseudo_bytes などの強力なランダム データ ジェネレーター。特定の要件がある場合は、ランダム データを生成するための代替方法を検討することを検討してください。
以上がPHP で有効な V4 UUID を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。