#! perl -slw use strict; use Time::HiRes qw[ time ]; my @c = (' ', '0'..'9', 'A'..'Z' ); sub fromB37 { my $n = shift; join '', map { my $c = $n %37; $n = int( $n / 37 ); $c[ $c ]; } 1 .. 6; } my %c = map{ $c[ $_ ] => $_ } 0 .. 36; sub toB37 { my $n = 0; $n = $n * 37 + $c{$_} for reverse unpack '(a)*', $_[0]; return $n; } my $start = time; for ( 1 .. 1e6 ) { my $n = int( rand 37**6 ); $n == toB37( fromB37( $n ) ) or die $n; } printf "Took %.3f second\n", time() - $start; __END__ C:\test>junk45 Took 16.404 second