Pedro Janssen
pedro at plex.nl
Fri Aug 26 17:29:52 CDT 2005
Hello, thanks to alle who responded. You real time savers. Pedro Janssen ----- Original Message ----- From: "Gustav Brock" <Gustav at cactus.dk> To: <accessd at databaseadvisors.com> Sent: Friday, August 26, 2005 1:40 PM Subject: Re: [AccessD] adding control number > 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 > > -- > AccessD mailing list > AccessD at databaseadvisors.com > http://databaseadvisors.com/mailman/listinfo/accessd > Website: http://www.databaseadvisors.com > >