package com.kritsit.casetracker.client.validation;
public class IdValidator implements IValidator<String> {
public boolean validate(Object obj) {
if (obj == null || obj.getClass() != String.class) {
return false;
}
String stringObj = (String) obj;
return isID(stringObj);
}
private boolean isID(String id) {
if (id.length() != 13) {
return false;
}
int control = Integer.parseInt("" + id.charAt(id.length() - 1));
int controlTest = calculateControl(id);
return control == controlTest;
}
private int calculateControl(String id) {
String[] aString = new String[6];
int i = 0;
for (int j = 0; i < aString.length; j = j + 2) {
aString[i++] = String.valueOf(id.charAt(j));
}
int a = 0;
for (String digit : aString) {
a += Integer.parseInt(digit);
}
String bString = "";
for (i = 1; i < id.length() - 1; i = i + 2) {
bString += id.charAt(i);
}
int b = Integer.parseInt(bString) * 2;
bString = String.valueOf(b);
b = 0;
for (i = 0; i < bString.length(); i++) {
b += Integer.parseInt(String.valueOf(bString.charAt(i)));
}
int c = a + b;
String cString = String.valueOf(c);
int ones = Integer.parseInt(String.valueOf(cString.charAt(cString.length() - 1)));
return (c % 10 == 0) ? 0 : Math.abs(10 - ones);
}
}