Erlang技术实现:如何获取字符串的前N个字符(以信用卡号为例)
在Erlang中仅显示信用卡号前四位的实现方案
嗨,这个敏感数据掩码的需求很常见,我来分享几种在Erlang里实现的实用方法,覆盖不同输入场景:
场景1:信用卡号是字符串类型(推荐)
如果你的信用卡号是以字符串形式存储的(这是更稳妥的方式,避免丢失前导零这类特殊情况),可以直接用string模块的函数处理:
% 定义信用卡号字符串 CreditCard = "5940043543536", % 提取前四位 FirstFourDigits = string:substr(CreditCard, 1, 4), % 生成掩码后的结果(前四位+剩余位数的星号) MaskedCard = FirstFourDigits ++ string:copies("*", length(CreditCard) - 4), % 输出结果 io:format("掩码后的信用卡号:~s~n", [MaskedCard]).
运行这段代码会输出:掩码后的信用卡号:5940********
核心函数说明:
string:substr/3:从字符串的第1位开始,截取长度为4的子串,刚好拿到前四位。string:copies/2:生成指定数量的星号,用来替换后面的敏感数字。
场景2:信用卡号是整数类型
如果你的信用卡号是以整数形式存储的,先把它转成字符串再处理就好:
% 定义信用卡号整数 CreditCardInt = 5940043543536, % 转成字符串 CreditCardStr = integer_to_list(CreditCardInt), % 后续操作和字符串场景一致 FirstFourDigits = string:substr(CreditCardStr, 1, 4), MaskedCard = FirstFourDigits ++ string:copies("*", length(CreditCardStr) - 4), io:format("掩码后的信用卡号:~s~n", [MaskedCard]).
封装成可复用的函数
为了更方便复用,还可以把逻辑封装成一个函数,顺便处理长度不足4位的边界情况:
mask_credit_card(Card) when is_list(Card) -> case length(Card) >= 4 of true -> string:substr(Card, 1, 4) ++ string:copies("*", length(Card) - 4); false -> % 若卡号长度不足4位,可根据需求调整,这里返回全星号 string:copies("*", length(Card)) end; mask_credit_card(Card) when is_integer(Card) -> mask_credit_card(integer_to_list(Card)).
调用示例:
% 字符串输入 mask_credit_card("5940043543536"). % 返回 "5940********" % 整数输入 mask_credit_card(5940043543536). % 返回 "5940********" % 短卡号输入 mask_credit_card("123"). % 返回 "***"
内容的提问来源于stack exchange,提问作者Jon Riel
相关产品推荐
相关产品推荐

