Erlang 生成图片验证码

Erlang 搭建的服务器难免会需要验证码的生成 , 代码如下 :

-module(erlycaptcha).
-compile(export_all).

new(Prefix, Len, LineNum) ->
    Code = generate_rand(Len),
    FileName = Prefix++"_"++Code,

    File = io_lib:format("./captcha/~s.png",[FileName]),
    filelib:fold_files("./captcha", io_lib:format("~s_.{~p}\.png", [Prefix, Len]), false, fun(F, Acc)-> file:delete(F), [F | Acc] end, []),
    
    Lines = lists:foldl(fun(_I, Acc) -> 
    	Acc ++  io_lib:format("Line ~p,0 ~p,100", [random:uniform(100), random:uniform(100)]) ++ " "
    end, "", lists:seq(1, LineNum)),
    
    Cmd = io_lib:format("convert -background '#FFFFFF' -fill '#000000' -size 100 -gravity Center -wave 5x100 -swirl 15 -font DejaVu-Serif-Book -pointsize 28 label:~s -draw '~s' ~s", [Code, Lines,File]),
    os:cmd(Cmd),

    {ok, BinPng} = file:read_file(File),
 
    BinPng.

check(Prefix, Code) ->
	FileName = Prefix++"_"++Code,
    File = io_lib:format("./captcha/~s.png",[FileName]),
    
	Res = filelib:is_regular(File),
	file:delete(File),
	Res.

generate_rand(Length) ->
	{A1,A2,A3} = now(),
    random:seed(A1, A2, A3),
    lists:foldl(fun(_I, Acc) -> 
    	Chars = "abcdefghijklmnopqrstuvwxyz0123456789",
    	Char = string:substr(Chars, random:uniform(length(Chars)), 1),
    	Char ++ Acc 
    end, "", lists:seq(1, Length)).

原文链接 : https://github.com/dzysyak/ErlyCaptcha

作者 Github : tojohnonly , 博客 : EnskDeCode

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值