見出し画像

無効なIDかどうかチェック

ふざけて「1212121212」とか「0123456789」とかのIDで登録できないようにあらかじめチェックしておく。

% 無効なIDかどうかチェック, 19May2021
% N.T. Hashimoto
check_invalid_ID(Num) :-
   number(Num), Num =:= 1234567890,
   write('invalid ID'),nl,!.
check_invalid_ID(Num) :-
   number(Num), Num =:= 9876543210,
   write('invalid ID'),nl,!.
check_invalid_ID(Num) :-
   number(Num),
   number_codes(Num,L),
   length(L,NN),NN =:= 10,
   is_same_element(L),
   write('invalid ID'),nl,!.
check_invalid_ID(Num) :-
   number(Num),
   number_codes(Num,L),
   length(L,NN),NN =:= 10,
   get_even_odd_list(L,Even,Odd),
   is_same_element(Even),
   is_same_element(Odd),
   write('invalid ID'),nl,!.

check_invalid_ID(Atom) :-
   atom(Atom),
   atom_codes(Atom,L),
   length(L,NN),NN =:= 10,
   is_same_element(L),
   write('invalid ID'),nl,!.
check_invalid_ID(Atom) :-
   atom(Atom),
   (
   Atom == '0123456789';
   Atom == '1234567890';
   Atom == '1234554321';
   Atom == '5432112345';
   Atom == '0987654321';
   Atom == '9876543210'
   ),
   write('invalid ID'),nl,!.

% すべて同じ要素
is_same_element([]) :- !,fail.
is_same_element(L) :-
   L = [X|Rest],
   is_same_element_aux(X,Rest),!.
is_same_element_aux(Ref,[]) :- !.
is_same_element_aux(Ref,[X|Rest]) :-
   X == Ref,
   !,
   is_same_element_aux(Ref,Rest).
% リストを偶数番目と奇数番目にわけ、1212121212のようなIDかどうかチェック
get_even_odd_list(IN,L,R) :-
   get_even_odd_list_aux(IN,L,R),!.
get_even_odd_list_aux([],[],[]) :- !.
get_even_odd_list_aux([X,Y|Rest],[X|L],[Y|R]) :-
   get_even_odd_list_aux(Rest,L,R).
get_even_odd_list_aux([X|Rest],[X|L],R) :-
   get_even_odd_list_aux(Rest,L,R).


この記事が気に入ったらサポートをしてみませんか?