Ostatnio potrzebowałem w pracy wprowadzić kilka danych testowych, ale aplikacja do wprowadzania tych danych wymagała m.in. wprowadzenia poprawnego numeru dowodu osobistego.
W dowodach osobistych cyfra kontrolna, to pierwsza cyfra w numerze dowodu (źródło), nie jak to się spodziewałem, że ostatnia.
Poniżej kod dwóch metod, do wygenerowania oraz do sprawdzenia numeru dowodu osobistego.
Poniżej kod dwóch metod, do wygenerowania oraz do sprawdzenia numeru dowodu osobistego.
Zobacz jak to działa.
String generateDO(){ String seria="", numer=""; Random random = new Random(); int suma=0; int waga[]={7,3,1,7,3}; for(int i=0;i<3;i++){ seria+=(char) (random.nextInt('Z'-'A')+'A'); suma+=waga[i]*(seria.charAt(i)-'A'+10); } for(int i=0;i<5;i++){ numer+=(char)(random.nextInt('9'-'0')+'0'); suma+=waga[i]*(numer.charAt(i)-'0'); } return seria+suma%10+numer; }
public boolean validate(String numerDO){ int waga[]={7,3,1,0,7,3,1,7,3}; if(numerDO==null || numerDO.length()!=9) return false; int suma=0; for(int i=0;i<9;i++){ if(Character.isLetter(numerDO.charAt(i)) && i<3){ suma+=waga[i]*(numerDO.charAt(i)-'A'+10); }else if(Character.isDigit(numerDO.charAt(i)) &&i>=3){ suma+=waga[i]*(numerDO.charAt(i)-'0'); }else return false; } if(((suma%10)+'0')==numerDO.charAt(3)) return true; return false; }
może by skrócić trochę ten kod bo w pętli for takie wyrażenia jak -'A'+10 się dość mało zmieniają :-) i co więcej w kodach ASCII są stałe.
OdpowiedzUsuńDruga sprawa, że w literach serii nie używane są litera O (jak OLA) i litera Q (jak QUAD) - literki Q jestem mniej pewien.
Trzecia sprawa to kolejność wydawania dowodów w danych seriach.
Do tej pory - połowa roku 2010 - wydawane są dowody osobiste serii zaczynającej się od liter AS*.
Sądząc po tempie wydawania nowych dowodów - obowiązek wymiany już był - teraz tylko ewentualne zagubione, zmienione i maturzyści - to seria A** się przez dwa lata nie skończy. Tak więc generator powinien nie generować - na razie przynajmniej - dowodów gdzie pierwszą literą jest litera inna niż A.
Przy okazji; jeśli ktoś ma dane z seriami DO (numer nie konieczny żeby nie naruszać prawa o danych osobowych) i datami wydania to byłbym wdzięczny. zylla (at) wipos.p.lodz.pl
jak to działa
OdpowiedzUsuń