php obscure string
/**
* @param string|string[] $plain
* @param int $revealStart
* @param int $revealEnd
* @param string $obscuration
* @return string|string[]
*/
function obscure(
$plain,
int $revealStart = 1,
int $revealEnd = 0,
string $obscuration = '*'
) {
if (is_array($plain)) {
return array_map(
function ($plainPart) use ($revealStart, $revealEnd, $obscuration) {
return obscure($plainPart, $revealStart, $revealEnd, $obscuration);
},
$plain
);
}
$plain = (string) $plain;
return mb_substr($plain, 0, $revealStart)
. str_repeat(
$obscuration,
max(
0,
mb_strlen($plain) -
($revealStart + $revealEnd)
)
)
. mb_substr(
$plain,
-$revealEnd,
$revealEnd
);
}