[AccessD] adding control number

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





More information about the AccessD mailing list