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
>
>