algorytm.org

Implementacja w Java



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Numer dowodu osobistego - Implementacja w Java
Ocena użytkownikóww: *****  / 9
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 02 marca 2008 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

DO.java:
// www.algorytm.org
// walidacja numeru dowodu osobistego
// Tomasz Lubinski (c) 2008

public class DO {

	static char letterValues[] = 
		{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 
		 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 
		 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 
		 'U', 'V', 'W', 'X', 'Y', 'Z'};

	private static int getLetterValue(char letter)
	{
	   int i;
	   for (i=0; i<letterValues.length; i++)
	   {
	      if (letter == letterValues[i])
	      {
	         return i;
	      }
	   }
	   return -1;
	}
	
	public static void main(String[] args) {
		String id;
		int checkSum;
		
		//pobierz numer dowodu osobistego
		System.out.println("Podaj numer dowodu osobistego (bez spacji, myslinkow, itp)");
		id = Console.readString();
		
		//sprawdz dlugosc podanego numeru
		if (id.length() != 9) {
			System.out.println("Nieprawidlowa dlugosc numeru");
			return;
		}
		//sprawdz czy podano 3 litery a nastepnie 6 cyfr
		for (int i=0; i<3; i++)		{
			if (getLetterValue(id.charAt(i)) < 10)	{
				System.out.println("Nieprawidlowa seria dowodu");
				return;
			}
		}
		for (int i=3; i<9; i++) {
			if (getLetterValue(id.charAt(i)) < 0 || getLetterValue(id.charAt(i)) > 9) {
				System.out.println("Nieprawidlowy numer dowodu");
				return;
			}
		}
		
		//sprawdz cyfre controlna
		checkSum = 7 * getLetterValue(id.charAt(0));
		checkSum += 3 * getLetterValue(id.charAt(1));
		checkSum += 1 * getLetterValue(id.charAt(2));
		checkSum += 7 * getLetterValue(id.charAt(4));
		checkSum += 3 * getLetterValue(id.charAt(5));
		checkSum += 1 * getLetterValue(id.charAt(6));
		checkSum += 7 * getLetterValue(id.charAt(7));
		checkSum += 3 * getLetterValue(id.charAt(8));
		checkSum %= 10;
		if (checkSum != getLetterValue(id.charAt(3))) {
			System.out.println("Podany numer dowodu jest niepoprawny");
		}
		else {
			System.out.println("Podany numer dowodu jest poprawny");
		}
	}

}
Komentarze
photo
+1 # Krzysztof Ch. 2016-04-14 08:02
Mam pytanie, w którym miejscu jest wartość indeksowa (10-35)? Nie widzę tego.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+1 # Tomasz Lubiński 2019-10-04 07:22
Za znalezienie wartości indeksowej (10 dla A, 11 dla B, ... 35 dla Z) odpowiada funkcja getLetterValue, która korzysta z tablicy letterValues. Indeks w tablicy jest wartością znaku znajdującego się w niej.
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz