International Securities Identification Number (ISIN) see Double-Add-Double Implentation
/**
* Calculates the Double-Add-Double from String src (length 11 chars)
* alternatively checks validity (length 12 chars, result 0 if valid else undefinied.
*/
public static int calculateCheckISIN(String src)
{
int result = 0;
int whatLength = (src.length() == 12)? 1 : 2;
int current;
for(int i = src.length() - 1; i >= 0; i--)
{
current = src.charAt(i);
if(current > '9')
{
// It is a char
current -= ('A' - 10);
result += (3-whatLength)*(current/10) + whatLength*current + (whatLength-1)*(current%10)/5;
}
else
{
// It is a numeric character
current -= '0';
result += whatLength*current + (whatLength-1)*(current/5);
whatLength = 3 - whatLength;
}
}
result %= 10;
result = (10 - result%10) % 10;
return result;
}