Solved

CR10 - Check Digit with Weight Using 7,5,3,2

Posted on 2013-02-07
3
573 Views
Last Modified: 2013-02-08
Hello:

I need help with the formula attached - I need to change it from Calculating "Double Every Second Digit" to using the 7,5,3,2 Check Digit Weight, repetition starting from the first number on the left of the scan line.  

Any ideas would be great.  I'm at a loss on how to do this at this point.  

Thank you!

** Attached Document Contains Example from Bank and the original formula.
Check-Digit-Weights.docx
0
Comment
Question by:eleale
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
3 Comments
 
LVL 77

Expert Comment

by:peter57r
ID: 38866471
Are all the numbers the same length? (19 digits in the example)

WHere does the answer 214 come from?  The sum of the products is 206.

Can you confirm that the field containing the number is being seen by Crystal as a text field.
0
 
LVL 101

Accepted Solution

by:
mlmcc earned 500 total points
ID: 38866874
Actually the sum of the products is 216  (127 + 45 = 172 not 162)
Here is the code to get the check digit for the give string

Local StringVar ScanNumber := '544969302100002500';
Local NumberVar Array Multipliers := [7,5,3,2,7,5,3,2,7,5,3,2,7,5,3,2,7,5,3,2,7,5,3,2,7,5,3,2,7,5,3,2];
Local NumberVar CheckDigitTotal;
Local NumberVar Index;
Local NumberVar ConstantValue := 8;

CheckDigitTotal := 0;

For Index := 1 to Length(ScanNumber) do
   CheckDigitTotal := CheckDigitTotal + Val(ScanNumber[Index]) * Multipliers[index];

CheckDigitTotal := CheckDigitTotal + ConstantValue;
CheckDigitTotal MOD 10

Open in new window



For a string from the database use
Local StringVar ScanNumber;
Local NumberVar Array Multipliers := [7,5,3,2,7,5,3,2,7,5,3,2,7,5,3,2,7,5,3,2,7,5,3,2,7,5,3,2,7,5,3,2];
Local NumberVar CheckDigitTotal;
Local NumberVar Index;
Local NumberVar ConstantValue := 8;

ScanNumber := {Yourfield};
CheckDigitTotal := 0;

For Index := 1 to Length(ScanNumber) do
   CheckDigitTotal := CheckDigitTotal + Val(ScanNumber[Index]) * Multipliers[index];

CheckDigitTotal := CheckDigitTotal + ConstantValue;
CheckDigitTotal MOD 10

Open in new window


The code will handle a 32-digit numeric string.  If you need more just exted the Multiplier array with more 7532's

You can change the constant as desired or even set it to a database field or parameter


mlmcc
0
 

Author Closing Comment

by:eleale
ID: 38868322
Thank you!!!  This worked perfectly.  

Awesome!
0

Featured Post

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

There have always been a lot of questions related to when Crystal Reports evaluates report components (such as formulas, summaries, cross-tabs, charts, to name a few examples). Crystal Reports uses a two-pass reporting process to provide greater …
Hello everyone, Hope you find this as helpful as we did. We have on the company I work for an application built in Delphi V with Crystal Reports 8. We all know that Crystal & Delphi can be temperamental sometimes and the worst thing is, nearly…
If you’ve ever visited a web page and noticed a cool font that you really liked the look of, but couldn’t figure out which font it was so that you could use it for your own work, then this video is for you! In this Micro Tutorial, you'll learn yo…
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…

627 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question