Ik zou me niet druk maken over de kans op een aanrijding. Genereer gewoon een willekeurige string en controleer of deze bestaat. Als dit het geval is, probeer het dan opnieuw en je hoeft het niet meer dan een paar keer te doen, tenzij je al een groot aantal platen hebt toegewezen.
Een andere oplossing voor het genereren van een 8-karakter lange pseudo-willekeurige string in pure (My)SQL:
SELECT LEFT(UUID(), 8);
Je kunt het volgende proberen (pseudo-code):
DO
SELECT LEFT(UUID(), 8) INTO @plate;
INSERT INTO plates (@plate);
WHILE there_is_a_unique_constraint_violation
-- @plate is your newly assigned plate number
Aangezien dit bericht onverwacht veel aandacht heeft gekregen, wil ik graag de aandacht vestigen op ADTC's opmerking :het bovenstaande stukje code is nogal dom en produceert opeenvolgende cijfers.
Voor iets minder domme willekeur, probeer in plaats daarvan iets als dit:
SELECT LEFT(MD5(RAND()), 8)
En voor echte (cryptografisch veilige) willekeur, gebruik RANDOM_BYTES()
in plaats van RAND()
(maar dan zou ik overwegen om deze logica naar de applicatielaag te verplaatsen).