ClearAll[Cusip] rules = Thread[(ToString /@ Range[0, 9]) -> Range[0, 9]]~Join~ Thread[CharacterRange["A", "Z"] -> Range[26] + 9]~Join~ Thread[Characters["*@#"] -> {36, 37, 38}]; Cusip[cusip_String] := Module[{s = cusip, sum = 0, c, value, check}, If[StringLength[s] != 9, Print["Cusip must be 9 characters!"]; False , s = Characters[ToUpperCase[s]]; Do[ c = s[[i]]; value = c /. rules; If[EvenQ[i], value *= 2]; sum += Floor[value/10] + Mod[value, 10]; , {i, 8} ]; check = Mod[(10 - Mod[sum, 10]), 10]; s[[-1]] === ToString[check] ] ] Cusip /@ {"037833100", "17275R102", "38259P508", "594918104", "68389X106", "68389X105"}