Computer Science Teacher

# December, 2007

• #### Office 2007 Tips and Tricks

Hilary Pike has a nice set of videos on her favorite features in Microsoft Office 2007. She starts off with one of my personal favorites - the citation and bibliography tool in Word 2007. She also demos the Equation editor and Math Add-in (about which I have blogged before) as well as new features in Excel, PowerPoint and OneNote. I've long believed that a simple demo can go a long way towards improving understanding. Hilary's how to videos fit that bill. The things she demos will same some people whole lot of time.

Speaking of OneNote, J. Scott Thompson (no relation) has an interesting post on using OneNote in the Classroom. OneNote seems to be the best kept secret of the Office product group. It's a very powerful tool though and seems like it should be particularly useful in schools.

• #### A Simple Check Digit Project

[Note: is this is interesting to you then this page at CS Unplugged is a must read for extra ideas and resources.]

I've been thinking for a while that I hadn't played with any small projects lately. I like to play with what I would call toy projects that let me play with numbers. The other day I was entering passport data in a form and while looking at my passport I noticed that there was an extra digit in the machine readable portion of the  document. Specifically while I recognized the passport number there was a tenth digit.

This was pretty obviously a check digit of some sort. Ah, I wondered, what is the formula for calculating it? Enter the Internet and a search turned up some information on how it is calculated. For me the next logical step was to create a program to make sure the formula worked with my passport number. Oh sure I could do it by hand but where is the fun in that.

And besides a program lets me think about basic principles. A formula of course. Data parsing naturally. Probably an array might be involved. It is in my solution it is but it might not be in other solutions. So what is the formula involved?

Each individual digit is multiplied by a weight. The first digit is multiplied by 7; the second by 3; the third by 1 and then the cycle repeats. These products are added together with the result divided by 10. The remainder is the check digit.

So if  the number is 123456789 (Passport numbers are all 9 digits long) you have:

1*7 + 2*3 + 3*1 + 4*7 + 5*3 + 6*1 + 7*7 + 8*3 + 9*1 = 147

Dividing by 10 leaves a remainder of 7 which is the check digit. Easy enough.

Now things get complicated if the passport "number" uses letters but US passports don't. If you want to include that in the problem the letters (upper case only) convert to numbers with "A" converting to 10 incrementing up to "Z" at 35. The rest of  the formula stays the same. But adding that complication makes the whole project more "interesting."

One of the things I would think about with this project with students is data validation. Things like:

• Are there the right number of digits? Note that the same formula is used for other numbers on the passport, like date of birth, that are not nine digits long.
• Are the characters in the data valid? Digits or uppercase letters between A and Z.
• What are good error messages? Is it enough to say wrong length or should you say how many are required? Of should you say too long or too short?

Of course to me the whole concept of check digits as tools for validation of data is well worth some discussion in class on its own merit. It might be useful for students to look up other numbers that use check digits and discuss why there are there.

I threw my solution together in about 11 lines of code (in VB .NET) and about half of those lines are data declarations. I'll leave doing it in other languages or in fewer lines of code as an exercise for the student though.