Advertisement
p2k

Erlang Base58

p2k
Nov 20th, 2011
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Erlang 0.92 KB | None | 0 0
  1. %% Base58 encoder/decoder for Erlang
  2. %% By Patrick "p2k" Schneider <patrick.p2k.schneider@gmail.com>
  3. %% This code is in public domain
  4.  
  5. -module(base58).
  6.  
  7. -export([encode/1, decode/1]).
  8.  
  9. -define(BASE58_TABLE, "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz").
  10.  
  11. encode(<<0, T/binary>>) ->
  12.     TEnc = encode(T),
  13.     <<$1, TEnc/binary>>;
  14. encode(Data) ->
  15.     N = binary:decode_unsigned(Data, big),
  16.     encode(N, <<>>).
  17.  
  18. encode(0, Acc) ->
  19.     Acc;
  20. encode(N, Acc) ->
  21.     C = lists:nth(N rem 58 + 1, ?BASE58_TABLE),
  22.     encode(N div 58, <<C:8/unsigned, Acc/binary>>).
  23.  
  24. decode(<<$1, T/binary>>) ->
  25.     TDec = decode(T),
  26.     <<0, TDec/binary>>;
  27. decode(Data) ->
  28.     binary:encode_unsigned(decode(Data, 0), big).
  29.  
  30. decode(<<>>, N) ->
  31.     N;
  32. decode(<<C:8/unsigned, T/binary>>, N) ->
  33.     case string:chr(?BASE58_TABLE, C) of
  34.         0 -> error(invalid_character);
  35.         V -> decode(T, N * 58 + (V - 1))
  36.     end.
  37.  
  38.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement