-module(utils).
% Загрузить модуль в интерпретатор можно так:
% > c(utils).
%  {ok,utils}
% > utils:md5_hex("booo").
%  "1c052f260d1b34423c32e7c7b29026b9"

% экспортируем все функции из модуля.
-compile(export_all).
% обычно так делают только для отладки, а в реальных библиотеках
% экспортируют только нужные функции, примерно так:
% -export([hex/1, md5_hex/1]).

% Функция, конвертирующая 4-битное целое в одну шестнадцатеричную цифру
hex(V) ->
    if
    V < 10 ->
            $0 + V;
    true ->
        $a + (V - 10)
    end.

% Функция, конвертирующая бинарную строку в шестнадцатеричное представление
binary_to_hex(Bin) ->
    lists:foldl(fun (E, Acc) ->
            [hex(E bsr 4) | [hex(E band 16#F) | Acc]] end,
        [],
        lists:reverse(binary_to_list(Bin))).

% md5 в hex виде
md5_hex(Bin) ->
    binary_to_hex(erlang:md5(Bin)).