در این مثال باید برنامه ئی بنویسیم که گذرواژه کاربر رو بررسی کند و بتواند گذرواژه های ساده، خیلی ساده، قوی و خیلی قوی را شناسایی کند. تعاریف بشرح زیر است:
گذرواژهی خیلی ضعیف: متشکل از عدد است و طولی زیر 8 کارکتر دارد
گذرواژهی ضعیف: متشکل از حروف است و طولی زیر 8 کارکتر دارد
گذرواژهی قوی: متشکل از عدد و حروف است و طولی بیش از 8 کارکتر دارد
گذارواژهی خیلی قوی: متشکل از عدد، حروف و کارکترهای ویژه نظیر !@#$%^&* است
کد برنامه بشرح زیر است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
%%@author Mahdi Hosseini Moghaddam <m.hoseini.m@gmail.com> %%@doc Exercise 25 from "Exercises for programmers" Book %%@reference from <a href="http://erlang.blog.ir">مثال هایی در ارلنگ</a>, %% 2018 %%@copyright 2018 by Mahdi Hosseini Moghaddam %%@version 0.1 -module(ex25). -export([main/0]). -compile([debug_info]). -define(VERY_WEEK, {"^[0-9]{0,8}$","Very Week"}). -define(WEEK,{"^[a-zA-Z]{0,8}$","Week"}). -define(STRONG,{"((?=.+[0-9])(?=.+[A-Za-z])){8,}","Strong"}). -define(VERY_STRONG,{"(?=.+[0-9])(?=.+[A-Za-z])(?=.*[!@#\$%\^&*]).{8,}","Very Strong"}). main() -> try run() catch error:_Error -> io:format( "Please Enter only Numeric type~n"); throw:negativeNumber -> io:format( "Please Enter only non-zero positive number~n") end. run() -> {ok,Q} = readItems(), case passwordValidator(Q) of {ok, Msg} -> io:fwrite("The password ~s is ~s ~n", [Q,Msg]); nomatch -> io:fwrite("No Macth ~n") end. get_validation() -> [?VERY_STRONG, ?STRONG, ?WEEK, ?VERY_WEEK]. passwordValidator(Str) -> passwordValidator(Str,get_validation()). %@ this function Validates Password passwordValidator(_Str, [] ) -> nomatch; passwordValidator(Str,[{Re, Msg}|T]) -> case re:run(Str,Re) of {match, _Captured} -> {ok,Msg} ; nomatch -> passwordValidator(Str, T) end. %@doc This function reads the user input the returns the result readItems() -> {ok,[P]} = io:fread( "Enter the password ","~s"), {ok,P}. |
من برای بررسی سختی گذرواژه از عبارات با قاعده (Regular Expression) استفاده کردم. ماژول re ارلنگ این کار را برای من میکند. قسمت سخت این مثال محاسبه عبارت باقاعده برای هر سختی هست. با استفاده از ماکرو تعریف آنها را در خط 10 تا 13 مشخص کردم.