Rev 67 | Blame | Last modification | View Log | Download | RSS feed
#! /usr/bin/env perl
# implementation of Fletcher's Checksum
# https://en.wikipedia.org/wiki/Fletcher's_checksum
# Actually, changed it to Adler
# https://en.wikipedia.org/wiki/Adler-32
use strict;
use warnings;
sub checksum {
   my $modulo = 65521;
   my $sum1 = 0;
   my $sum2 = 0;
   while ( my $a = shift ) {
      $sum1 = ( $sum1 + $a) % $modulo;
      $sum2 = ( $sum2 + $sum1 ) % $modulo;
   }
   return ( $sum2 << 16 ) | $sum1;
}
my $input = join( '', <> );
printf ( "%x\n", &checksum( unpack( "C*", $input ) ) );
1;