<?php
/**
* 数据脱敏接口 PHP接口源代码
*
* 接口说明:PHP 数据脱敏 支持指定类型及自定义规则脱敏,支持:1姓名,2出生日期,3手机号,4身份证,5银行卡号,6电子邮箱
*
* 最后修改:2024-10-12 17:11:01
*
* @author dogstar www.yesapi.cn
*
* 来源:https://open.yesapi.cn/apicode/8877.html
*/
function ($params, $di) {
// 字符串转数组(支持中文英文混合字符串)
function stringToArray($string, $charset = "utf-8")
{
$length = mb_strlen($string, 'utf-8');
$stringArray = [];
for ($i = 0; $i < $length; $i++) {
$stringArray[] = mb_substr($string, $i, 1, 'utf-8');
}
return $stringArray;
}
$string = $params['string'];
$type = 3; $index = []; $replace = "*";
// [姓名] 前1或2 只显示姓,支持单姓和复姓<例子:欧阳**,王**>
// [出生日期] 前2 只显示年份,支持任意日期格式<例子:19**-**-**,19******,1990/**/**>
// [手机号] 前3后4 手机号只显示网络识别号+用户号码<例子:137****4574>
// [身份证] 前6后3 隐藏出生年份后两位+月+日 <例子:41032420******7191>
// [银行卡号] 前6后4 其他用星号隐藏每位1个星号<例子:6222600**********1234>
// [电子邮箱] @之前 邮箱前缀仅显示第一个字母,前缀其他隐藏,用星号代替,@及后面的地址显示<例子:g**@163.com>
// [地址] 只显示到地区,不显示详细地址;我们要对个人信息增强保护<例子:北京市海淀区****>(后续更新)
if (!$type && !count($index)) {
return $string;
}
$strArray = stringToArray($string); // 字符串转数组
if (!is_array($strArray) || $length = !count($strArray)) {
return $string;
}
// 姓名
if ($type == 1) {
$digit = count($strArray) > 3 ? 1 : 0;
foreach ($strArray as $k => $v) {
$k > $digit && array_push($index, $k);
}
}
$number = 0;
// 出生日期
if ($type == 2) {
foreach ($strArray as $k => $v) {
if (is_numeric($v)) {
$number++;
($number == 3 || $number == 4 || $number == 5 || $number == 6 || $number == 7 || $number == 8) && array_push($index, $k);
}
}
}
// 手机号
if ($type == 3) {
$len = strpos($string, '+86') !== false ? mb_strlen('+86', 'utf-8') : 1; // 判断是否+86
foreach ($strArray as $k => $v) {
if (is_numeric($v)) {
$number++;
($number == 3 + $len || $number == 4 + $len || $number == 5 + $len || $number == 6 + $len) && array_push($index, $k);
}
}
}
$type == 4 && $index = [8, 9, 10, 11, 12, 13]; // 身份证
$type == 5 && $index = [6, 7, 8, 9, 10, 11, 12, 13]; // 银行卡
// 邮箱
if ($type == 6) {
foreach ($strArray as $k => $v) {
// if (!$k) continue;
if ($v == "@") break;
array_push($index, $k);
}
}
if ($type > 6 || !count($index)) {
return $string;
}
foreach ($index as $v) {
$strArray[$v] = $replace;
}
return implode("", $strArray) ?? "";
}
在线运行
数据脱敏接口 - 免费接口源码库
持续更新中…… 免费使用,一键生成你的API
+ 复制到我的接口(请先登录,支持在线开发API)
预览接口发布效果
查看开发教程