Gustav Brock
Gustav at cactus.dk
Fri Aug 26 06:40:18 CDT 2005
Hi Pedro Looks like a Modulus 10 check digit calculation. Below is a function that will do this for you in a maintainable way. Use it like this: strChk = Right(ModulusAppend("00327833", 10), Len("00327833")) /gustav <code> Function ModulusAppend( _ ByVal strNumber As String, _ ByVal intModulus As Integer) _ As String ' Appends a Modulus 10 or 11 check digit to strNumber. ' ' 1999-10-08. Cactus Data ApS, CPH. Dim intC As Integer, intF As Integer, intN As Integer Dim intL As Integer, intM As Integer, intT As Integer Dim strNumCheck As String Dim strNumChr As String Dim strNumClean As String ' Max. length of number. intM = 32 - 1 If intModulus = 10 Or intModulus = 11 Then intL = Len(strNumber) ' Remove non-digits. For intN = 0 To intL - 1 strNumChr = Mid(strNumber, intN + 1, 1) If (Asc(strNumChr) >= 48) And (Asc(strNumChr) <= 57) Then strNumClean = strNumClean & strNumChr End If Next intN strNumber = strNumClean intL = Len(strNumber) End If If intL > 0 And intL <= intM Then For intN = 0 To intL - 1 intC = Val(Mid(strNumber, intL - intN, 1)) Select Case intModulus Case Is = 10 intF = (1 + ((intN + 1) Mod 2)) intC = intF * intC intC = Int(intC / 10) + (intC Mod 10) Case Is = 11 intF = 2 + (intN Mod 6) intC = intF * intC End Select intT = intT + intC Next Select Case intModulus Case Is = 10 intC = intT - (intT Mod intModulus) + intModulus strNumCheck = Format((intC - intT) Mod intModulus, "@") Case Is = 11 intC = intModulus - (intT Mod intModulus) Select Case intC Case Is = 11 ' A check digit for this number cannot be calculated! strNumber = vbNullString intC = 0 Beep Case Is = 10 intC = 0 End Select strNumCheck = Format(intC, "@") End Select strNumber = strNumber & strNumCheck Else strNumber = "0" End If ModulusAppend = strNumber End Function </code> >>> pedro at plex.nl 26-08-2005 11:11 >>> Hello Group, I have an ID (text, because it begins with 00) that exist of 8 numbers. I need to change this ID by removing the first 0, and by adding a extra control number. This control number can be calculated from this ID. This can be done by several query's. Is it possible to do in one query?? For example. I have ID: 00327833 Take the number of the odd positions: 0 3 7 3 Place these numbers behind each other to make one number: 0373 Multiply this number with 2: 0373 x 2 = 0746 Count up the separate numbers from this last multiplication: 0 + 7 + 4 + 6 = 17 >From the original ID, take the even positions: 0 2 8 3 Count up the separate numbers from the even positions with the sum of the last count up: 17 + 0 + 2 + 8 + 3 = 30 The last number of the previous sum is the extra control number: 0 >From the original ID, remove the first 0 and add the control number: 03278330