Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Fügen Sie eindeutige Zeichenfolgen mit 8 zufälligen Zeichen ein

Dadurch erhalten Sie eine zufällige 8-stellige Zeichenfolge:

substr(str_pad(dechex(mt_rand()), 8, '0', STR_PAD_LEFT), -8);

Hier zu finden:http://www.richardlord.net/blog/php-password- Sicherheit

Oder wenn das Benutzernamensfeld eindeutig ist, können Sie auch verwenden:

substr(md5('username value'), 0, 8);

Obwohl es extrem unwahrscheinlich ist, insbesondere für md5, garantiert keiner der beiden Fälle eine eindeutige Zeichenkette, also würde ich wahrscheinlich so etwas tun:

// Handle user registration or whatever...

function generatePID($sUsername) {
    return substr(md5($sUsername), 0, 8);
}

$bUnique = false;
$iAttempts = 0;

while (!$bUnique && $iAttempts < 10) {
    $aCheck = $oDB->findByPID(generatePID("username value")); // Query the database for a PID matching whats generated
    if (!$aCheck) { // If nothing is found, exit the loop
        $bUnique = true;
    } else {
        $iAttempts++;
    }
}

// Save PID and such...

... was wahrscheinlich nur 1 'Check'-Abfrage ergeben würde, in Einzelfällen vielleicht 2, und eine eindeutige Zeichenfolge sicherstellen würde.