#DEFINE ALPHABET "ABCDEFGHIJKLMNOPQRSTUVWXYZ" #DEFINE VOWELS "AEIOU" #DEFINE VALIDCHARS "0123456789" + ALPHABET LOCAL cMsg As String, cCode As String LOCAL ARRAY codes[12] codes[1] = "710889" codes[2] = "B0YBKJ" codes[3] = "406566" codes[4] = "B0YBLH" codes[5] = "228276" codes[6] = "B0YBKL" codes[7] = "557910" codes[8] = "B0YBKR" codes[9] = "585284" codes[10] = "B0YBKT" codes[11] = "B00030" codes[12] = "B0030A" DIMENSION w[6] w[1] = 1 w[2] = 3 w[3] = 1 w[4] = 7 w[5] = 3 w[6] = 9 CLEAR FOR EACH cCode IN codes cMsg = "" IF IsValidCode(@cCode, @cMsg) && Parameters passed by reference cCode = cCode + GetCheckDigit(cCode) ? cCode ELSE ? cCode, cMsg ENDIF ENDFOR FUNCTION GetCheckDigit(tcCode As String) As String LOCAL i As Integer, c As String, s As Integer, k As Integer s = 0 FOR i = 1 TO 6 c = SUBSTR(tcCode, i, 1) IF ISDIGIT(c) k = VAL(c) ELSE k = 9 + AT(c, ALPHABET) ENDIF s = s + k*w[i] ENDFOR RETURN TRANSFORM((10 - s%10)%10) ENDFUNC FUNCTION IsValidCode(tcCode As String, tcMsg As String) As Boolean LOCAL n As Integer, c As String, i As Integer *!* Get rid of any spaces and convert to upper case tcCode = UPPER(STRTRAN(tcCode, " ")) n = LEN(tcCode) IF LEN(tcCode) # 6 tcMsg = "Code must be 6 characters." ELSE FOR i = 1 TO n c = SUBSTR(tcCode, i, 1) IF NOT c $ VALIDCHAR tcMsg = c + " is not a valid character." EXIT ELSE IF c $ VOWELS tcMsg = "Vowels are not allowed." EXIT ENDIF ENDIF ENDFOR ENDIF RETURN EMPTY(tcMsg) ENDFUNC