Generera unik sträng alltid, hur i php?

Permalänk
Medlem

Generera unik sträng alltid, hur i php?

Hyrde in en ukrainsk php utvecklare att skapa ett skript till mig, problemet är bara att kommunikationen via engelska inte var något vidare, har nu upptäckt att scriptet inte genererar ett unikt id varje gång, utan randomizar mellan väldigt mycket vilket gör det möjglit att 2 id kan bli samma, någon php expert som vet hur jag enkelt kan ändra denna kod:

substr(md5(rand(0,9999999999999)),0,16);

till något som alltid skapar ett unikt id?

Permalänk
Medlem

Vad behöver du ett unikt nummer för?
Enklast är ju att du ger förra numret plus ett varje gång

Permalänk
Medlem

ja, det spelar absolut ingen roll hur den genererar detta, så länge de alltid är 100% unik är jag nöjd, detta stog i specifikationen till scriptet men denna människa verkar inte fattat att det absolut viktigaste var att varje id är unik så att duplicates inte kan hända.

jag ändrade koden till

substr( "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ,mt_rand( 0 ,50 ) ,1 ) .substr( md5( time() ), 1);

och det verkar generera en längre sträng och också ta tidpunkt in i åtankte vilket gör risken att det blir en duplicate minskar drastiskt... men inte perfekt.

Permalänk
Medlem

GUIDs är ju bra

http://php.net/manual/en/function.com-create-guid.php

Citat:

sannolikheten för att samma tal genereras fler än en gång är mycket liten. Om varje människa på jorden genererade 600 miljoner nycklar skulle sannolikheten för att två likadana genereras ligga på 50%

Visa signatur

Corsair 750D | i5 4670k | ASUS Z87-a | 8GB Corsair Dominator | Asus GTX770-DC2OC | Samsung 840 EVO 250GB | WD 500GB X2

Permalänk
Medlem

GUID är ju som sagt rätt bra för det.

Om man nu inte kan använda det (av någon anledning), och det gäller tokens så finns det här i PHP dokumentationen;

If you need to generate cryptographically secure tokens use openssl_random_pseudo_bytes().

Visa signatur

-- Arkade --

Permalänk
Medlem

tack.... framtida id's är nu unika, dock har jag en annan "challenge" framför mig, jag har exporterat databasen och filtrerat ut så jag bara har random id's per row, hur kan jag enkelt hitta duplicates?

har googlat och alla rekommenderar textFX i notepad ++ men detta ger mig inget, den tar bort duplicate rows men jag behöver se vilka som är dupe för att manuellt fixa dessa direkt i databasen....

såhär ser textfilen ut:

49304b89904f029b a2af84522b9fd401 0c308e5884e0a106 44cff1f58fd62aad d05a7ff0f6fe50e1 187c4882fcc9e4f6 dbdecc0d700abc73 0977849653c16fc0 f837f5702f109285 b31b645fda0cedc4 a78eec4c37054c3b eae79fd5c13636ba f39e462d909ce2ff

etc....

finns det nån regex som kanske behåller dupes och tar bort resten , eller möjligheten att highlighta dupe? det ända jag lyckats gör är att ta bort dupe men det ger mig inget som sagt för jag vill se vilka id som är samma.

Permalänk
Medlem

hittade en lösning att hitta detta genom sql istället