FUNCTION ck_digit PARAMETERS nNum *--------------------------------------------------------------- * Programmer..: R. Bosma Date: 2.Mar.1995 * Description.: Calculates and appends Modulus 10 checkdigit * : to any number (up to 9,999,999) * Written for.: dB4 v1.1 * Called by:..: Any Calls: None * Usage.......: ck_digit(<expN>) * Parameters..: nNum: Numeric input (maximum 7 digits) * Returns.....: Numeric (or -1 if input was too large) * Example.....: STORE ck_digit(nVar) TO newVar *--------------------------------------------------------------- IF nNum > 9999999 RETURN -1 ENDIF DECLARE digits[11] STORE -1 TO nTmp STORE RIGHT("0000000"+LTRIM(STR(nNum)),7) TO cNum nTmp = VAL(SUBSTR(cNum,1,1))*2 digits[1] = LEFT(STR(nTmp,2),1) digits[2] = RIGHT(STR(nTmp,2),1) digits[3] = SUBSTR(cNum,2,1) nTmp = VAL(SUBSTR(cNum,3,1))*2 digits[4] = LEFT(STR(nTmp,2),1) digits[5] = RIGHT(STR(nTmp,2),1) digits[6] = SUBSTR(cNum,4,1) nTmp = VAL(SUBSTR(cNum,5,1))*2 digits[7] = LEFT(STR(nTmp,2),1) digits[8] = RIGHT(STR(nTmp,2),1) digits[9] = SUBSTR(cNum,6,1) nTmp = VAL(SUBSTR(cNum,7,1))*2 digits[10] = LEFT(STR(nTmp,2),1) digits[11] = RIGHT(STR(nTmp,2),1) nTmp = 1 STORE 0 TO nDigSum DO WHILE nTmp < 12 nDigSum = nDigSum + VAL(digits[nTmp]) nTmp = nTmp + 1 ENDDO RELEASE digits nTmp = CEILING(nDigSum/10) * 10 RETURN VAL(STR(nNum)+STR(nTmp-nDigSum,1)) * * EOFunc ck_digit *--Hope that helps!