Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Host 20. 12. 2015, 18:06:50

Název: Unikátní číslo v JS
Přispěvatel: Host 20. 12. 2015, 18:06:50
Ahoj, v php existuje funkce, která vrátí unikátní číslo, je to nějaký čas, (jednotky nevím) počítaný snad od roku 1970. exituje v JS taky něco takového ? Nebo jak můžu vygenerovat unikátní číslo ? Díky
Název: Re:Unikátní číslo v JS
Přispěvatel: pcdrm 20. 12. 2015, 18:28:00
Math.floor(Date.now() / 1000)
Název: Re:Unikátní číslo v JS
Přispěvatel: pcdrm 20. 12. 2015, 18:29:42
teda to je timestamp v sekundach
Název: Re:Unikátní číslo v JS
Přispěvatel: Host 20. 12. 2015, 18:30:33
Díky ale timestamp mi nepomuze...
Název: Re:Unikátní číslo v JS
Přispěvatel: asdasdx 20. 12. 2015, 18:59:33
Preco ti nepomoze timestamp? Nechces aby to slo porade? Ak je to tak tak na unikatne cislo potrebujes bud pool a porovnavat...
Název: Re:Unikátní číslo v JS
Přispěvatel: k 20. 12. 2015, 21:07:31
Unikátní číslo ti nedá žádný jazyk na světě. Jediná možnost je napsat si algoritmus, který bude nějakým způsobem kontrolovat unikátnost čísla vůči všem již tebou vygenerovaným číslům. Programovat to netřeba, můžeš použít třeba autoincrement v databázi.
Název: Re:Unikátní číslo v JS
Přispěvatel: Hmm 21. 12. 2015, 10:13:26
Díky ale timestamp mi nepomuze...
Ale to o co ziadas je timestamp. To co si popisoval v prvom prispevku, to co ti vracia PHP, je timestamp.
Název: Re:Unikátní číslo v JS
Přispěvatel: Tomas__ 21. 12. 2015, 10:34:51
https://en.wikipedia.org/wiki/Universally_unique_identifier
Pro tebe je asi Verze 1 a 4. Ale moznost kolize existuje vzdycky, i kdyz velmi mala.

http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
Název: Re:Unikátní číslo v JS
Přispěvatel: Bystroushaak 21. 12. 2015, 10:41:44
Pokud použiješ UUID4, tak v rámci aplikace na jednojádrovém stroji je kolize vyloučena. V rámci celého světa je šance tak malá, že výhra ve sportce je oproti tomu docela hodně pravděpodobná.
Název: Re:Unikátní číslo v JS
Přispěvatel: Bystroushaak 21. 12. 2015, 10:43:49
Jen bych ještě dodal, že jestli to budeš hledat, tak si dej bacha, aby to nebyla prasácká implementace UUID4 na pár řádek, protože internet je plný zkryplených implementací od javascript kodérů, kteří do toho neintegrují čas.
Název: Re:Unikátní číslo v JS
Přispěvatel: www 21. 12. 2015, 12:01:28
Pokud použiješ UUID4, tak v rámci aplikace na jednojádrovém stroji je kolize vyloučena. V rámci celého světa je šance tak malá, že výhra ve sportce je oproti tomu docela hodně pravděpodobná.
To plati o UUID1 s MAC. Neviem, ako by mohol ziskat MAC v JS.

Opakovane volania PRNG pouzivane v UUID4 nie su nahodne v zmysle skolskej nahodnosti a ani sa tomu velmi neblizia. Uz som robil test nahodnosti este v PHP (5.3?), ktore som bombardoval nahodnymi poziadavkami, a kolizie v nahodne vygenerovanych heslach (na kazdy znak zvlast rand()) nastavali okolo ~70k pokusov - viem o problemoch rand(), ale toto ma prekvapilo. A teraz verte nahodnemu prehliadacu z minuleho tisicrocia na podobne starom OS, ze ma rozumny PRNG a dostal "dost nahodny" seed...

Proste globalne unikatne cislo v JS bez podpory serveru nespravis. Cas od roku 1970 v milisekundach sa da dostat cez Date.now(), ale nemusi to byt unikatne ani lokalne a uz vobec nie globalne -  milisekunda je dost dlha doba a kazdy moze mat nastaveny cas inak.
Název: Re:Unikátní číslo v JS
Přispěvatel: Tomas__ 21. 12. 2015, 12:43:14
Pokud použiješ UUID4, tak v rámci aplikace na jednojádrovém stroji je kolize vyloučena. V rámci celého světa je šance tak malá, že výhra ve sportce je oproti tomu docela hodně pravděpodobná.
To plati o UUID1 s MAC. Neviem, ako by mohol ziskat MAC v JS.

Opakovane volania PRNG pouzivane v UUID4 nie su nahodne v zmysle skolskej nahodnosti a ani sa tomu velmi neblizia. Uz som robil test nahodnosti este v PHP (5.3?), ktore som bombardoval nahodnymi poziadavkami, a kolizie v nahodne vygenerovanych heslach (na kazdy znak zvlast rand()) nastavali okolo ~70k pokusov - viem o problemoch rand(), ale toto ma prekvapilo. A teraz verte nahodnemu prehliadacu z minuleho tisicrocia na podobne starom OS, ze ma rozumny PRNG a dostal "dost nahodny" seed...

Proste globalne unikatne cislo v JS bez podpory serveru nespravis. Cas od roku 1970 v milisekundach sa da dostat cez Date.now(), ale nemusi to byt unikatne ani lokalne a uz vobec nie globalne -  milisekunda je dost dlha doba a kazdy moze mat nastaveny cas inak.
https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues

Takze ja bych udelal UUID1, kde misto MAC bych dal ten random + XOR s necim co muze byt unikatni. Ano kolize muze byt vzdy, ale to ti server muze RESTem odpovedet. Jednou za 1000 let...


Název: Re:Unikátní číslo v JS
Přispěvatel: k 21. 12. 2015, 13:36:41
Pokud použiješ UUID4, tak v rámci aplikace na jednojádrovém stroji je kolize vyloučena.

UUID má s unikátností společné pouze to slovo "unikátní".

Cas od roku 1970 v milisekundach sa da dostat cez Date.now(), ale nemusi to byt unikatne ani lokalne a uz vobec nie globalne -  milisekunda je dost dlha doba a kazdy moze mat nastaveny cas inak.

Čas si každý může nastavit jaký chce, mimo to se běžně děje že NTP čas vrátí o kousek zpět. Je zcela běžné že now() chvíli vrací hodnoty které už jednou šly.
Název: Re:Unikátní číslo v JS
Přispěvatel: Tomas__ 21. 12. 2015, 13:57:33
Pokud použiješ UUID4, tak v rámci aplikace na jednojádrovém stroji je kolize vyloučena.

UUID má s unikátností společné pouze to slovo "unikátní".

Cas od roku 1970 v milisekundach sa da dostat cez Date.now(), ale nemusi to byt unikatne ani lokalne a uz vobec nie globalne -  milisekunda je dost dlha doba a kazdy moze mat nastaveny cas inak.

Čas si každý může nastavit jaký chce, mimo to se běžně děje že NTP čas vrátí o kousek zpět. Je zcela běžné že now() chvíli vrací hodnoty které už jednou šly.
No jak tu uz nekolikrat nekdo zminoval. Nic neni 100% unikatni. Server by si to mel ohlidat a brat to neco jako optimisticke zamykani. Ono generovat UID na klientovi take nedava smysl. Ale je to tak nejlepsi odpoved co de da poskytnout z udaju, ktere tazatel poskytl.
Název: Re:Unikátní číslo v JS
Přispěvatel: Ondra Satai Nekola 21. 12. 2015, 14:06:04
Pokud to umis na serveru, tak si muzes kus toho js generovat...
Název: Re:Unikátní číslo v JS
Přispěvatel: Ondřej Novák 21. 12. 2015, 14:27:18
vygenerovat 32 náhodných bajtů kryptograficky bezpečným generátorem náhodných čísel a máš pravděpodobnost výbuchu galaxie že vznikne kolize.