NAME Algorithm::Damm - Calculate the Damm error correction check digit. SYNOPSIS use Algorithm::Damm qw/check_digit is_valid/; \$c = check_digit("43881234567"); print "It works\n" if is_valid("43881234567\$c"); DESCRIPTION This module implements the Damm algorithm for calculating a check digit. You can find information about the algorithm by searching the web for "Damm ECC". In particular, see the "SEE ALSO" section (below). HISTORY This module came about as I was reverse engineering a checksum method being used on another project of mine. History of the method used was lost to the sands of time, and I needed something to run some quick tests on various checksum algorithms. This module is a reimplementation of one of the algorithms I had tested. FUNCTIONS is_valid CHECKSUMMED_NUM This function returns 1 if the final character of CHECKSUMMED_NUM is the correct checksum for the rest of the number, 0 if not, and undef if CHECKSUMMED_NUM contains an invalid character or does not contain at least two digits (one for the number, and one for the checksum). This function is equivalent to substr \$N,length(\$N)-1 eq check_digit(substr \$N,0,length(\$N)-1) Additionally, due to the way this algorithm works, if you crank the checksum calculation through the last digit (checkdigit included), you will end up with a value of 0. check_digit NUM This function returns the checksum of the given number. It will return undef if it is not able to calculate the checksum. SEE ALSO Algorithm::LUHN Original code based on Algorithm::LUHN by Tim Ayers. Wikipedia - Article explaining the Damm error correction algorithm. REPOSITORY You can find the source at . BUGS None known at this time, but feel free to submit them to RT or the issue tracker for this source at GitHub. AUTHOR This module was written by Brian T. Wightman (http://search.cpan.org/search?author=MLX) based on the module Algorithm::LUHN by Tim Ayers. COPYRIGHT Copyright (c) 2013 Brian T. Wightman. All rights reserved. LICENSE This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.