extension String {
/// Masks all leading characters with a specified character,
/// keeping the last 'visibleCount' visible.
func masked(visibleCount: Int = 4, maskChar: Character = "*") -> String {
guard count > visibleCount else { return self }
let maskLength = count - visibleCount
let maskedPrefix = String(repeating: maskChar, count: maskLength)
let visibleSuffix = suffix(visibleCount)
return maskedPrefix + visibleSuffix
}
}
// Examples:
let cardNumber = "1234567890123456"
let accountID = 9876543210
let shortCode = "123"
print(cardNumber.masked()) // ************3456
print(String(accountID).masked()) // ******3210
print(shortCode.masked()) // 123
/*
run:
************3456
******3210
123
*/