|
|
- -module(utTestMd5).
-
- -compile([export_all, nowarn_unused_function, nowarn_unused_vars, nowarn_export_all]).
-
- t1(N, Len) ->
- Bin = list_to_binary([X rem 256 || X <- lists:seq(1, Len)]),
- tt1(N, Bin, <<>>).
-
- %% 这种方式更快
- tt1(0, _Bin, Md5) ->
- Md5;
- tt1(N, Bin, _Md5) ->
- Md5 = erlang:md5(Bin),
- tt1(N - 1, Bin, Md5).
-
- t2(N, Len) ->
- Bin = list_to_binary([X rem 256 || X <- lists:seq(1, Len)]),
- tt2(N, Bin, <<>>).
-
- tt2(0, _Bin, Md5) ->
- Md5;
- tt2(N, Bin, _Md5) ->
- Md5 = crypto:hash(md5, Bin),
- tt2(N - 1, Bin, Md5).
-
- t3(N, Len) ->
- Bin = list_to_binary([X rem 256 || X <- lists:seq(1, Len)]),
- Md5Bin = erlang:md5(Bin),
- tt3(N, Md5Bin, <<>>).
-
- tt3(0, _Md5Bin, HexStr) ->
- HexStr;
- tt3(N, Md5Bin, _HexStr) ->
- <<Hash:128/integer>> = Md5Bin,
- HexStr =string:to_lower(integer_to_list(Hash, 16)),
- tt3(N - 1, Md5Bin, HexStr).
-
- t4(N, Len) ->
- Bin = list_to_binary([X rem 256 || X <- lists:seq(1, Len)]),
- Md5Bin = erlang:md5(Bin),
- tt4(N, Md5Bin, <<>>).
-
- tt4(0, _Md5Bin, HexStr) ->
- HexStr;
- tt4(N, Md5Bin, _HexStr) ->
- HexStr = lists:flatten([io_lib:format("~2.16.0b", [X]) || X <- binary_to_list(Md5Bin)]),
- tt4(N - 1, Md5Bin, HexStr).
-
- %% 这种方式更加快 快好几倍呢
- t5(N, Len) ->
- Bin = list_to_binary([X rem 256 || X <- lists:seq(1, Len)]),
- Md5Bin = erlang:md5(Bin),
- tt5(N, Md5Bin, <<>>).
-
- tt5(0, _Md5Bin, HexStr) ->
- HexStr;
- tt5(N, Md5Bin, _HexStr) ->
- HexStr = utHex:binaryToHex(Md5Bin),
- tt5(N - 1, Md5Bin, HexStr).
-
- deHex(H) when H >= $a, H =< $f -> H - $a + 10;
- deHex(H) when H >= $A, H =< $F -> H - $A + 10;
- deHex(H) when H >= $0, H =< $9 -> H - $0.
-
- t6(N) ->
- HexBin = "b59c67bf196a4758191e42f76670ceba",
- tt6(N, HexBin, []).
-
- tt6(0, _HexBin, List) ->
- List;
- tt6(N, HexBin, _List) ->
- HexBin1 = list_to_binary(HexBin),
- List = [(deHex(X1) * 16 + deHex(X2)) || <<X1:8, X2:8>> <= HexBin1],
- tt6(N - 1, HexBin, List).
-
- %% 这种方式更加快 快好几倍呢
- t7(N) ->
- Hex = "b59c67bf196a4758191e42f76670ceba",
- tt7(N, Hex).
-
- tt7(0, Hex) ->
- {String, _} =
- lists:foldr(
- fun(E, {Acc, nolow}) ->
- {Acc, deHex(E)};
- (E, {Acc, LO}) ->
- {[deHex(E) * 16 + LO | Acc], nolow}
- end,
- {[], nolow}, Hex),
- String;
- tt7(N, Hex) ->
- {String, _} =
- lists:foldr(
- fun(E, {Acc, nolow}) ->
- {Acc, deHex(E)};
- (E, {Acc, LO}) ->
- {[deHex(E) * 16 + LO | Acc], nolow}
- end,
- {[], nolow}, Hex),
- String,
- tt7(N - 1, Hex).
-
- u4(0, Fun) ->
- ?MODULE:Fun();
- u4(N, Fun) ->
- ?MODULE:Fun(),
- u4(N - 1, Fun).
-
- uuid() ->
- erlang:md5(term_to_binary({erlang:system_time(nanosecond), rand:uniform(134217727), make_ref()})).
- uuid2() ->
- term_to_binary({erlang:system_time(nanosecond), rand:uniform(134217727), make_ref()}).
-
- get_uuid() ->
- <<(crypto:strong_rand_bytes(8))/bytes,
- (erlang:term_to_binary(erlang:now()))/bytes>>.
-
- u1(0) ->
- crypto:strong_rand_bytes(16);
- u1(N) ->
- crypto:strong_rand_bytes(16),
- u1(N - 1).
-
-
- u2(0) ->
- erlang:md5(term_to_binary({erlang:system_time(nanosecond), rand:uniform(134217727), make_ref()}));
- u2(N) ->
- erlang:md5(term_to_binary({erlang:system_time(nanosecond), rand:uniform(134217727), make_ref()})),
- u2(N - 1).
-
- u3(0) ->
- crypto:strong_rand_bytes(4);
- u3(N) ->
- crypto:strong_rand_bytes(4),
- u3(N - 1).
-
- u33(0) ->
- rand:uniform(2100000000);
- u33(N) ->
- rand:uniform(2100000000),
- u33(N - 1).
-
- u333(0) ->
- erlang:localtime();
- u333(N) ->
- erlang:localtime(),
- u333(N - 1).
-
- u4(0) ->
- erlang:md5(integer_to_list(erlang:phash2({os:system_time(micro_seconds), make_ref(), make_ref()})));
- u4(N) ->
- erlang:md5(integer_to_list(erlang:phash2({os:system_time(micro_seconds), make_ref(), make_ref()}))),
- u1(N - 1).
-
|