generowanie unikalnego numeru konta

0

Potrzebuję napisać funkcję, która będzie zwracać unikalny numer konta bankowego (wystarczy 9 cyfrowy) przydzielony konkretnemu użytkownikowi, który podając imię, nazwisko , login i hasło rejestruje się w programie. Jedyne co przychodzi mi teraz do głowy do generowanie losowego numeru i sprawdzanie czy przypadkiem nie został już taki wcześniej wygenerowany i zapisany w bazie, a jeśli tak to ponowienie próby wygenerowania losowej liczby. Nie wiem czy taki pomysł jest dobry ?

0

Wg mnie nie jest taki skrajnie zły. Ewentualnie możesz trzymać np. 5 liczników i traktować je jako składowe jednej większej liczby (odpowiednio je inkrementować).

0000 0000 0000 0000
0000 0000 0000 0001
...
0000 0000 0000 9999
0000 0000 0001 0000
0000 0000 0001 0001
...
9999 9999 9999 9999

Choc to zalezy od tego, jak dlugi ma to byc numer - moze wystarczy Ci int ;)

0

Weź jakiś generator liczb losowych o stanie mieszczącym się w 32 bitach (całkiem dobry do tego zastosowania jest w źródłach glibc, szukaj rand()) i przypisuj kolejne wyjścia generatora jako numer użytkownika. Do wygenerowania kolejnego numeru potrzebujesz wyłącznie ostatniego wygenerowanego numeru, na którym dasz kolejny przebieg generatora. Gwarantuje Ci to około 2^32 (niektóre wartości początkowe mogą być nieodpowiednie) unikalnych numerów wyglądających losowo oraz przy dodawaniu nowego nie musisz sprawdzać poprzednich. Minusem tego rozwiązania jest możliwość przewidzenia numeru znając poprzednie.

0

do poprzedniego dodać jakąś liczbę, najlepiej pierwszą i wziąć modulo 2^32

0

Skoro masz już bazę danych to po co piszesz to samodzielnie? Sekwencja na bazie powinna rozwiązać problem. Jeżeli to będzie mało to do sekwencji można jeszcze dodać np. sumę kontrolną.

1 użytkowników online, w tym zalogowanych: 0, gości: 1