Kezdőoldal » Számítástechnika » Programozás » Van egy veletlen generalt...

Van egy veletlen generalt szamsorom, hogy tudom megoldani hogy ami az adatbazisban szerepel?

Figyelt kérdés

Az lenne a feladat hogy generalas pillanataban mar nem egyezhet meg a ket szam amit generalok.

Tehat nincs lehetosegem osszehasonlitani es ha false akkor ujra fut... php es mysql


2019. jún. 24. 07:02
1 2
 11/17 anonim ***** válasza:
Emellett tömbben nem is csak egész számokat lehet tárolni.
2019. jún. 24. 12:57
Hasznos számodra ez a válasz?
 12/17 anonim ***** válasza:

"Emellett tömbben nem is csak egész számokat lehet tárolni."

Sehol nem állítottam az ellenkezőjét.


"Igen a sorszam egyedi azonosito lenne"

Ez esetben kétséges, hogy sorszámnak hívható, mint utaltam már rá korábban.


Pár éve csináltam már e-mail megerősítő link küldő rendszert, ahol automatikusan kap emailre egy linket (miután kitöltötte az illető az űrlapot). A link megfelelő része randomgenrált és mindig különbözik mint ami már volt valaha. Az openssl random generátor php-ből generált egy random stringet melyet átalakírottam hogy kompatibilis legyen a linkhez, mely link mögött egy php kód végezte a dolgát, paraméterbe volt megadva a random érték az adott linkbe. Adatbázis szinten ugye lehet olyan oszlop vagy több is ahol csak egyedi értékek lehetnek. Csak annyit csináltam igazából, hogy csak azt ellenőriztem, hogy sikeres e az INSERT INTO. Olyan nagy tartományon generáltam, hogy még 1 millió év alatt is valószínűtlen az ütközés, sőt az univerzum eddigi teljes ideje alatt is, gyakorlatilag mondhatni lehetetlen. Azt még meg lehetett volna csinálni, hogy ugye ha nem sikerült akkor megnézi, hogy ütközés van e, ha ütközés van akkor újra generálja. Határidő kötött, kérték hogy működjön, ilyenekkel ami gyakorlatilag sose kell azt nem raktam bele, úgy is hibaüzenetet raktam bele ha megtadta a műveletet a szerver. Ami vagy akkor lenne, ha az adatbázisba 2x ott egyforma érték került volna bele ugye mint mondtam az UNIQUE vagy a PRIMARY KEY adatbázisszinten visszautasítja, vagy egyéb más ok miatt. Egy 128 bitesen generált random összes lehetséges állapotának száma az sok sok trilliószor több mint 13 milliárd év másodpercben.


Egyébként meg nem értem, hogy miért ne lenne lehetőséged újragenerálni. (Azt az openssl-es randomgenerátort szeretem ilyesmihez, meg security szempontból nem véletlen van ez.) Berakja, ellenőrzi hogy sikerült e a művelet, ha nem megnézi,hogy létezik e már ilyen, ha igen akkor megismétli. Észre se venné a felhasználó ekkor sem. Ha a generálási tartomány lényegesen nagyobb mint reálisan előforduló rekord darabszám akkor sose vagy nagyon ritkán kell újra megismételni. Különben meg már említettem azt a megoldást is hogy sose lenne ütközés egyből matematikailag bizonyíthatóan külön bármiféle egyezőségvizsgálat nélkül, de az igazából indokolatlan lenne erre, ahhoz az egészet be kell rántani egy tömbbe hozzá. Még ilyen pontos idővel is trükközhetsz hozzá hogy azt is belekevered, hogy akkor még abban a másodpercben kéne pont véletlenül ugyanannak kijönni a randomnak, ha már 1 másodpercel több a gép órája akkor már elvi lehetősége sincs egyezni.

2019. jún. 24. 14:38
Hasznos számodra ez a válasz?
 13/17 A kérdező kommentje:

Probaltam ugy hogy feltoltottem random 100ezer "szamlaszamot"

Es akkor az uj generalasanal elegge gondolkozott a rendszer... ezert is szeretnem megoldani ugy hogy letezhet e arra megoldas hogy vegig olyan adatot kapjak ami meg soha nem volt hasonlitas nelkul

2019. jún. 24. 15:20
 14/17 anonim ***** válasza:
Ha tényleg úgy akarsz azonosítót generálni, hogy ne kelljen gondolkozni, hogy létezett-e, akkor olyan alapot kell keresni az azonosító generálásához, ami garantáltan nem ismétlődik. Ezt a legtöbsször timestamp alapján szokták elérni. A MySQL-ben van pl egy uuid() függvény, ami pontosan azt csinálja, amit szeretnél: egy globálisan egyedi azonosítót hoz létre. PHP-ban is vannak ezt a célt szolgáló függvények, pl a uniqid, vagy a com_create_guid. Alapvetően ezek a kulcsszavak, amik irányába keresgélned kell, uuid, guid, unique id
2019. jún. 24. 15:30
Hasznos számodra ez a válasz?
 15/17 A kérdező kommentje:
De nagy vagy, koszi ezt kerestem, probalom is
2019. jún. 24. 15:35
 16/17 anonim ***** válasza:
Guid-ot kell generálni.
2019. jún. 24. 15:39
Hasznos számodra ez a válasz?
 17/17 anonim ***** válasza:
100%

Bocs az illúziórombolásért, de a lényegét tekintve az is azt csinálja amit már írtam, összességében még így se lenne rövidebb az akkori kódom ha erre módosítanám.

Olyan kicsi valószínűségre csökken hogy ugyanaz jöjjön ki, hogy gyakorlatban nagyon esélytelen hogy elő fog fordulni. Matematikai precizitással nem garantálja.

Részletek : [link]

2019. jún. 24. 16:16
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!