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?

PESEL - Implementacja w Java
Ocena użytkownikóww: *****  / 31
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 06 października 2005 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.

PeselValidator.java:
/**
 * @author Tomasz Lubinski
 * www.algorym.org
 * (c) 2005
 *
 * Class for PESEL validating
 */
public class PeselValidator {
	
	private byte PESEL[] = new byte[11];
	private boolean valid = false;
	
	public PeselValidator(String PESELNumber) {
		if (PESELNumber.length() != 11){
			valid = false;
		}
		else {
			for (int i = 0; i < 11; i++){
				PESEL[i] = Byte.parseByte(PESELNumber.substring(i, i+1));
			}
			if (checkSum() && checkMonth() && checkDay()) {
				valid = true;
			}
			else {
				valid = false;	
			}
		}
	}
	
	public boolean isValid() {
		return valid;
	}
	
	public int getBirthYear() {
		int year;
		int month;
		year = 10 * PESEL[0];
		year += PESEL[1];
		month = 10 * PESEL[2];
		month += PESEL[3];
		if (month > 80 && month < 93) {
			year += 1800;
		}
		else if (month > 0 && month < 13) {
			year += 1900;
		}
		else if (month > 20 && month < 33) {
			year += 2000;
		}
		else if (month > 40 && month < 53) {
			year += 2100;
		}
		else if (month > 60 && month < 73) {
			year += 2200;
		}			
		return year;
	}
	
	public int getBirthMonth() {
		int month;
		month = 10 * PESEL[2];
		month += PESEL[3];
		if (month > 80 && month < 93) {
			month -= 80;
		}
		else if (month > 20 && month < 33) {
			month -= 20;
		}
		else if (month > 40 && month < 53) {
			month -= 40;
		}
		else if (month > 60 && month < 73) {
			month -= 60;
		}			
		return month;
	}
	
	
	public int getBirthDay() {
		int day;
		day = 10 * PESEL[4];
		day += PESEL[5];
		return day;
	}

	public String getSex() {
		if (valid) {
			if (PESEL[9] % 2 == 1) {
				return "Mezczyzna";
			}
			else {
				return "Kobieta";
			}
		}
		else {
			return "---";
		}	
	}
	
	private boolean checkSum() {
		int sum = 1 * PESEL[0] + 
		          3 * PESEL[1] +
				  7 * PESEL[2] +
				  9 * PESEL[3] +
				  1 * PESEL[4] +
				  3 * PESEL[5] +
				  7 * PESEL[6] +
				  9 * PESEL[7] +
				  1 * PESEL[8] +
				  3 * PESEL[9];
		sum %= 10;
		sum = 10 - sum;
		sum %= 10;

		if (sum == PESEL[10]) {
			return true;
		}
		else {
			return false;
		}
	}
	
	private boolean checkMonth() {
		int month = getBirthMonth();
		int day = getBirthDay();
		if (month > 0 && month < 13) {
			return true;
		}
		else {
			return false;
		}
	}
	
	private boolean checkDay() {
		int year = getBirthYear();
		int month = getBirthMonth();
		int day = getBirthDay();
		if ((day >0 && day < 32) &&
			(month == 1 || month == 3 || month == 5 ||
			 month == 7 || month == 8 || month == 10 ||
			 month == 12)) {
			return true;
		} 
		else if ((day >0 && day < 31) &&
			(month == 4 || month == 6 || month == 9 ||
			 month == 11)) {
			return true;
		}
		else if ((day >0 && day < 30 && leapYear(year)) ||
				 (day >0 && day < 29 && !leapYear(year))) {
			return true;
		}
		else {
			return false;
		}		
	}
	
	private boolean leapYear(int year) {
		if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
			return true;
		else
		    return false;
	}
}
Komentarze
photo
+1 # MZ 2012-04-19 14:05
Bardzo mi się przydało, dziękuję
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+2 # Krisso 2018-11-08 09:07
private boolean leapYear(int year) {
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
}
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz