package com.idega.util.text;
import java.sql.Date;
import java.util.Calendar;
import java.util.Locale;
import com.idega.util.IWTimestamp;
/**
* Title:
* Description:
* Copyright: Copyright (c) 2001
* Company:
* @author <a href="mailto:aron@idega.is">Aron Birkir</a>
* @version 1.0
*/
public class SocialSecurityNumber {
private String sSSN = null;
private int iSSN = 0;
public SocialSecurityNumber() {
}
public SocialSecurityNumber(String SSN) {
this.sSSN = SSN;
}
public void setSocialSecurityNumber(String SSN) {
this.sSSN = SSN;
}
public int getAge() {
if (this.sSSN != null) {
return getAge(this.sSSN);
}
else {
return 0;
}
}
/** @return THE AGE OF THE YEAR**/
public static int getAge(String socialSecurityNumber) {
int thisYear = Calendar.getInstance().get(Calendar.YEAR);
int age;
int year = Integer.parseInt(socialSecurityNumber.substring(4, 6));
if (socialSecurityNumber.length() == 10) {
if (socialSecurityNumber.endsWith("9")) {
year += 1900;
}
if (socialSecurityNumber.endsWith("0")) {
year += 2000;
}
if (socialSecurityNumber.endsWith("1")) {
year += 2100; // in the future
}
if (socialSecurityNumber.endsWith("2")) {
year += 2200;
}
}
else {
year += 1900;
}
age = thisYear - year;
return age;
}
public static Date getDateFromSocialSecurityNumber(String socialSecurityNumber) {
return getDateFromSocialSecurityNumber(socialSecurityNumber, true);
}
public static Date getDateFromSocialSecurityNumber(String socialSecurityNumber, boolean checkForValidity) {
if ( !checkForValidity || isValidIcelandicSocialSecurityNumber(socialSecurityNumber) ) {
int day = Integer.parseInt(socialSecurityNumber.substring(0, 2));
int month = Integer.parseInt(socialSecurityNumber.substring(2, 4));
int year = Integer.parseInt(socialSecurityNumber.substring(4, 6));
int century = Integer.parseInt(socialSecurityNumber.substring(9));
if (century == 9) {
year += 1900;
}
if (century == 0) {
year += 2000;
}
if (century == 1) {
year += 2100;
}
if (century == 2) {
year += 2200;
}
IWTimestamp stamp = new IWTimestamp(day,month,year);
return stamp.getDate();
}
return null;
}
public static boolean isValidSocialSecurityNumber(String ssn,Locale locale){
if(ssn!=null && locale.equals(new Locale("is","IS"))){
return isValidIcelandicSocialSecurityNumber(ssn);
}
// TODO handle other system locales
else {
return false;
}
}
/**
* Checks for validity of an icelandic ssn
*/
public static boolean isValidIcelandicSocialSecurityNumber(String socialSecurityNumber) {
if (socialSecurityNumber.length() != 10) {
return (false);
}
try {
int var1 = Integer.parseInt(socialSecurityNumber.substring(0, 1));
int var2 = Integer.parseInt(socialSecurityNumber.substring(1, 2));
int var3 = Integer.parseInt(socialSecurityNumber.substring(2, 3));
int var4 = Integer.parseInt(socialSecurityNumber.substring(3, 4));
int var5 = Integer.parseInt(socialSecurityNumber.substring(4, 5));
int var6 = Integer.parseInt(socialSecurityNumber.substring(5, 6));
int var7 = Integer.parseInt(socialSecurityNumber.substring(6, 7));
int var8 = Integer.parseInt(socialSecurityNumber.substring(7, 8));
int var9 = Integer.parseInt(socialSecurityNumber.substring(8, 9));
int sum = (3 * var1) + (2 * var2) + (7 * var3) + (6 * var4) + (5 * var5) + (4 * var6) + (3 * var7) + (2 * var8);
int result = sum % 11;
int variable = 11 - result;
if (variable == 10) {
variable = 1;
}
else if (variable == 11) {
variable = 0;
}
if (var9 == variable) {
return (true);
}
else {
return (false);
}
}
catch (Exception e) {
return (false);
}
}
}