NAME
    Convert::Base32::Crockford - Encode/Decode Strings using Crockford
    Base32 Scheme

SYNOPSIS
        use Digest::SHA 'sha1';
        use Convert::Base32::Crockford;

        my $foo = "foo";
        my $digest = sha1($foo);
        my $base32 = encode_base32($digest);

        die unless $digest eq decode_base32($base32);

DESCRIPTION
    Base32 encoding is a human friendly way to encode binary strings. You
    see these encodings all the time in URLs.

    The "standard" encoding scheme is RFC 4648. Convert::Base32 is an
    excellent module for encoding/decoding this scheme.

    Douglas Crockford has proposed an alternate encoding scheme at
    <http://www.crockford.com/wrmg/base32.html>. It has many advantages,
    discussed below.

API
    This module is a wrapper of Convert::Base32, with the exact same API,
    but using the Crockford scheme.

    It exports these two subroutines:

    encode_base32
            my $crockford_base32_string = encode_base32($arbitrary_string);

    decode_base32
            my $arbitrary_string = decode_base32($crockford_base32_string);

ADVANTAGES
    From a computational perspective, the Crockford scheme offers no real
    advantages over RFC 4648. However, from the human/usability perspective
    I am convinced that the Crockford scheme is superior.

    Zero is Zero
        As with most numerical base encodings (like hex), Crockford counting
        starts at '0'. RFC 4648 counting starts at 'A', and '0' means 26. It
        would be very challenging for most humans to count using 4648.

    ASCII Sorting
        Crockford encoded strings of equal length, will sort in the same
        ASCII order as their numerical sort order.

    Lenient Decode
        The Crockford scheme allows extra characters like dash ('-') and
        common mistypes like 'O' for '0', when decoding. This accomodates
        some human error and also some human friendly formatting.

    More Digits
        This is a bit esoteric, but at the time of this writing, I am
        interested in encodings that contain at least one letter and and
        least one number. For a given length encoding, the Crockford scheme
        offers a bigger set of strings that meet this requirement than RFC
        4648.

NOTE
    There is a similarly named CPAN module called Encode::Base32::Crockford.
    It uses the Crockford encoding scheme but it only works on numbers (as
    of the time this module was written).

    Base32 and Base64 are almost always employed to encode *binary strings*
    into a human readable form. Encode::Base32::Crockford::base32_encode
    dies when you try to encode a string that is not string of ASCII digits.

CREDITS
    I met Douglas Crockford at the Taiwan OSDC conference in 2010. Smart
    guy. Thanks for this, Douglas.

    Thanks to miyagawa++ for his Convert::Base32 work.

AUTHOR
    Ingy döt Net <ingy@cpan.org>

COPYRIGHT
    Copyright (c) 2011-2014. Ingy döt Net.

    This program is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.

    See <http://www.perl.com/perl/misc/Artistic.html>

