Unikátní číslo v JS

Host

Unikátní číslo v JS
« kdy: 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


pcdrm

Re:Unikátní číslo v JS
« Odpověď #1 kdy: 20. 12. 2015, 18:28:00 »
Math.floor(Date.now() / 1000)

pcdrm

Re:Unikátní číslo v JS
« Odpověď #2 kdy: 20. 12. 2015, 18:29:42 »
teda to je timestamp v sekundach

Host

Re:Unikátní číslo v JS
« Odpověď #3 kdy: 20. 12. 2015, 18:30:33 »
Díky ale timestamp mi nepomuze...

asdasdx

Re:Unikátní číslo v JS
« Odpověď #4 kdy: 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...


k

Re:Unikátní číslo v JS
« Odpověď #5 kdy: 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.

Hmm

Re:Unikátní číslo v JS
« Odpověď #6 kdy: 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.

Tomas__

Re:Unikátní číslo v JS
« Odpověď #7 kdy: 21. 12. 2015, 10:34:51 »

Re:Unikátní číslo v JS
« Odpověď #8 kdy: 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á.

Re:Unikátní číslo v JS
« Odpověď #9 kdy: 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.

www

Re:Unikátní číslo v JS
« Odpověď #10 kdy: 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.

Tomas__

Re:Unikátní číslo v JS
« Odpověď #11 kdy: 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...



k

Re:Unikátní číslo v JS
« Odpověď #12 kdy: 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.

Tomas__

Re:Unikátní číslo v JS
« Odpověď #13 kdy: 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.

Re:Unikátní číslo v JS
« Odpověď #14 kdy: 21. 12. 2015, 14:06:04 »
Pokud to umis na serveru, tak si muzes kus toho js generovat...