You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:30:48