我有信用卡号,假设5940043543536。出于安全考虑,我只想显示前四位数字。
如何在 erlang 中做到这一点?
Erlang 中的字符串只是一个整数列表,所以你可以使用lists:sublist/3
:
1> String = "5940043543536".
"5940043543536"
2> lists:sublist(String, 1, 4).
"5940"
请注意,位置参数从1
开始,而不是从0
开始。
如果您收到二进制(而不是字符串(
binary:part(<<"123455678901234">>, 1, 4).
<<"2345">>
或者如果您需要获取最后四位数字
binary:part(<<"123455678901234">>, {byte_size(<<"123455678901234">>), -4}).
<<"1234">>
较新版本的 Erlang 内置了字符串函数。对于您的情况
1> string:slice("123455678901234", 1, 4).
"1234"
还有一个 String:Substring 函数,它的工作方式相同,但它已被 slice 折旧。
您可以尝试使用模式匹配:
1> String = "5940043543536".
"5940043543536"
2> [A,B,C,D|_] = String.
"5940043543536"
3> [A,B,C,D].
"5940"
或者你可以创建自己的函数,例如:
1> String = "5940043543536".
"5940043543536"
2> GetDigits = fun F(_, Acc, 0) -> lists:reverse(Acc);
F([H|T], Acc, N) -> F(T, [H|Acc], N - 1) end.
#Fun<erl_eval.43.91303403>
3> GetDigits(String, [], 4).
"5940"