package com.idega.util.text; import java.sql.Date; import java.util.Calendar; import java.util.Locale; import java.util.logging.Logger; import com.idega.util.IWTimestamp; import com.idega.util.StringUtil; /** * 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; 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; } } 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 (StringUtil.isEmpty(ssn) || locale == null) return false; if (ssn != null && locale.equals(new Locale("is", "IS"))) { return isValidIcelandicSocialSecurityNumber(ssn); } else { Logger.getLogger(SocialSecurityNumber.class.getName()).warning("Social security number '" + ssn + "' can not be verified by locale " + locale + ". Please implemente verifier!"); return true; } } /** * 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); } } public static boolean isIndividualSocialSecurityNumber(String socialSecurityNumber, Locale locale) { if (isValidSocialSecurityNumber(socialSecurityNumber, locale)) { if (locale.equals(new Locale("is", "IS"))) { return isIcelandicIndividualSocialSecurityNumber(socialSecurityNumber); } } return false; } private static boolean isIcelandicIndividualSocialSecurityNumber(String socialSecurityNumber) { int var1 = Integer.parseInt(socialSecurityNumber.substring(0, 1)); return var1 >= 0 && var1 <= 3; } public static boolean isCompanySocialSecurityNumber(String socialSecurityNumber, Locale locale) { if (isValidSocialSecurityNumber(socialSecurityNumber, locale)) { if (locale.equals(new Locale("is", "IS"))) { return isIcelandicCompanySocialSecurityNumber(socialSecurityNumber); } } return false; } private static boolean isIcelandicCompanySocialSecurityNumber(String socialSecurityNumber) { int var1 = Integer.parseInt(socialSecurityNumber.substring(0, 1)); return var1 >= 4 && var1 <= 9; } public static void main(String[] arguments) throws Exception { System.out.println(isCompanySocialSecurityNumber("7101002090", new Locale("is", "IS"))); } }