CLCMOD10        CALCULATE MODULUS 10                   TAACLQZ

 The Calculate  Modulus 10 command  calculates the  value for a  Modulus
 10 Self-Check  Digit.  The  command returns a value  for the self-check
 digit  which is  intended to be  added to a  number such  as a customer
 number.  DDS supports the  CHECK(M10) keyword for a field to  assist in
 ensuring the number is keyed correctly.

 Self-check  digits  are commonly  used  when  entering  values such  as
 customer   numbers   to  minimize   errors  caused   by   miskeying  or
 transposing digits.

 A different  algorithm is  required for  a UCC  modulus  10 self  check
 digit.  See the CLCUCCCHKD tool.

 The  code for  the CLCMOD10  command  calculates the  self check  digit
 number  by  calculating from  the  units position.    This  follows the
 algorithm used by the  system in the CHECK(M10)  function in DDS.   The
 CLCMOD10L command  calculates beginning from  the high  order position.
 Both  commands produce  the same  answer on  an  odd number  of digits.
 The result differs when there are an even number of digits.

 The  CLCMOD10 command  creates the self-check  digit.   For example, if
 your customer  number is  5 digits  without the  self-check digit,  the
 following  CL program  using  CLCMOD10 would  calculate the  self-check
 digit and return a 6 digit customer number.

              PGM        PARM(&CUST5 &CUST6)
              DCL        &CUST5 *CHAR LEN(5)
              DCL        &CUST6 *CHAR LEN(6)
              DCL        &DIGIT *CHAR LEN(1)
              CLCMOD10   INPUT(&CUST5) MOD10DGT(&DIGIT)
              CHGVAR     &CUST6 (&CUST5 *CAT &DIGIT)
              ENDPGM

 The 6 digit value becomes the customer number.

 See  the DDS  manual for a  discussion of  how the  self-check digit is
 calculated.

 Checking the value without using DDS
 ------------------------------------

 You can use CLCMOD10 to  check a value also.   Just strip off and  save
 the digit  position, use  CLCMOD10 to  calculate the self-check  digit,
 and them compare the calculated digit to the saved version.

 CLCMOD10  algorithm
 -------------------

 There is  a weight factor of 2 for beginning  at the units position and
 working left every other digit.  Each  digit of the result is added  to
 the sum.   Then  beginning at  the units  position -1, the  sum of  the
 digits is added.

 For example, the number 61248 would result in:

            2 x 8  = 16       Digits = 1 and 6 = 7
            2 x 2  = 4        Digits = 4       = 4
            2 X 6  = 12       Digits = 1 and 2 = 3
                                                --
                                                14

            Digits not multiplied   4 and 1    = 5
                                                --
                                                19

            Next higher number ending in 0      20
            Subtract (20 -19) = 1 as the self check digit

 Using CLCMOD10L,  the self check digit would be  the same because there
 are an odd number of digits.

 If  there is an even  number of digits, such  as 123456, the result for
 CLCMOD10 would be 6.

                   6 x 2 = 12      Digits   1 + 2 = 3
                   4 x 2 =  8      Digits   0 + 8 = 8
                   2 x 2 =  4      Digits   0 + 4 = 4
                                                   --
                                                   15
                           Digits     1 + 3 + 5     9
                                                   --
                                                   24

            Next higher number ending in 0      30
            Subtract (30 -24) = 6

 Using CLCMOD10L, the result would be 9

                   1 x 2 =  2      Digits   0 + 2 = 2
                   3 x 2 =  6      Digits   0 + 6 = 6
                   5 x 2 = 10      Digits   1 + 0 = 1
                                                   --
                                                    9
                           Digits     2 + 4 + 6    12
                                                   --
                                                   21

            Next higher number ending in 0      30
            Subtract (30 -21) = 9

 CLCMOD10  escape messages you can monitor for
 ---------------------------------------------

       TAA9891    The input value cannot be all blanks.
       TAA9892    The input value must only contain digits.

 Escape messages from based on functions will be re-sent.

 CLCMOD10L escape messages you can monitor for
 ---------------------------------------------

       TAA9891    The input value cannot be all blanks.
       TAA9892    The input value must only contain digits.

 Escape messages from based on functions will be re-sent.

 CLCMOD10 Command parameters                           *CMD
 ---------------------------

    INPUT         The input  value without  the self-check  digit.   The
                  value cannot  be all blanks and must  have only digits
                  and  trailing   blanks.    Up  to  31  digits  may  be
                  entered.

    MOD10DGT      The self-check  digit to  be returned.   The  variable
                  must be declared as *CHAR LEN(1).


 CLCMOD10L Command parameters                          *CMD
 ----------------------------

    INPUT         The input  value without  the self-check  digit.   The
                  value cannot  be all blanks and  must have only digits
                  and  trailing  blanks.    Up  to  31  digits  may   be
                  entered.

    MOD10DGT      The self-check  digit to  be returned.   The  variable
                  must be declared as *CHAR LEN(1).


 Restrictions
 ------------

 Because the  commands return variables, they  may only be used  in a CL
 program.

 Prerequisites
 -------------

 The following TAA Tools must be on your system:

      EDTVAR          Edit variable
      SNDESCMSG       Send escape message

 Implementation
 --------------

 None, the tool is ready to use.

 Objects used by the tool
 ------------------------

    Object        Type    Attribute      Src member    Src file
    ------        ----    ---------      ----------    ----------

    CLCMOD10      *CMD                   TAACLQZ       QATTCMD
    CLCMOD10L     *CMD                   TAACLQZ2      QATTCMD
    TAACLQZC      *PGM       CLP         TAACLQZC      QATTCL
    TAACLQZC      *PGM       CLP         TAACLQZC2     QATTCL

Added to TAA Productivity Tools January 15, 2002


Home Page

Powered by AS/400Powered by AS/400 Last modified on January 12, 2010 © 1995, 2010 - Jim Sloan, Inc.