CLEAR
?[MBT1006],GoodString([MBT1006])
?[1006MBT],GoodString([1006MBT])
?[12345],GoodString([12345])
?[TE],GoodString([TE])
?[Only alpha but too many (not exactly 2)],[TEA],GoodString([TEA])
?[Two few alpha], [TE3210],GoodString([TE3210])
?[Two few digits],[TEA321],GoodString([TEA321])
?[Two few alpha],[0123TE],GoodString([0123TE])
?[Two few digits],[123TEA],GoodString([123TEA])
?[Two many alpha], [TEME3210],GoodString([TEME3210])
?[Two many alpha], [TEM321R],GoodString([TEM321R])
?[Scrambled], [012ABC3],GoodString([012ABC3])
?[Scrambled], [AB0123C],GoodString([AB0123C])
FUNCTION GoodString
LPARAMETERS tcString
LOCAL lnAlphaLen,lnDigitLen,lnOnlyAlphaMax,llGood,llFirstAlpha,lnChar
* string containing only digits
* or
* string containing exactly 2 alphabetic characters
* or
* strings composed exactly by 3 alphabetic characters folowed by 4 digits
* or
* strings composed exactly by 4 digits folowed by 3 alphabetic characters
lnAlphaLen = 3
lnDigitLen = 4
lnOnlyAlphaMax = 2
llGood = LEN(CHRTRAN(m.tcString,[0123456789],[])) = 0 && only digits
IF !m.llGood
llGood = LEN(CHRTRAN(m.tcString,[ABCDEFGHIJKLMNOPQRSTUVWXYZ],[])) = 0 and LEN(m.tcString) = m.lnOnlyAlphaMax && exactly 2 alphabic characters
IF !m.llGood
llGood = LEN(CHRTRAN(m.tcString,[ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789],[])) = 0 and m.lnAlphaLen + m.lnDigitLen = LEN(m.tcString)
IF m.llGood && only digits and alphabetic characters
llFirstAlpha = ISALPHA(m.tcString)
IF m.llFirstAlpha && first char is alphabetic
FOR lnChar = 2 TO m.lnAlphaLen &&LEN(m.tcString)
llGood = ISALPHA(SUBSTR(m.tcString, m.lnChar, 1))
IF !m.llGood
EXIT
ENDIF
NEXT
IF m.llGood
FOR lnChar = m.lnAlphaLen + 1 TO LEN(m.tcString)
llGood = ISDIGIT(SUBSTR(m.tcString, m.lnChar, 1))
IF !m.llGood
EXIT
ENDIF
NEXT
ENDIF
ELSE && first char is digit
FOR lnChar = 2 TO m.lnDigitLen &&LEN(m.tcString)
llGood = ISDIGIT(SUBSTR(m.tcString, m.lnChar, 1))
IF !m.llGood
EXIT
ENDIF
NEXT
IF m.llGood
FOR lnChar = m.lnDigitLen + 1 TO LEN(m.tcString)
llGood = ISALPHA(SUBSTR(m.tcString, m.lnChar, 1))
IF !m.llGood
EXIT
ENDIF
NEXT
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
RETURN m.llGood