mask

fun mask(value: String, visibleStart: Int = 0, visibleEnd: Int = 4, maskChar: Char = 'X'): String(source)

Masks a mobile number for PII-safe display.

Masking operates on the raw input string (not normalised). This is intentional — the masker is a pure display utility that works character-by-character on whatever string it receives. Callers who want to mask a normalised number should call format first: Mobile.mask(Mobile.format(value)).

Default behaviour: last 4 characters visible, remainder replaced by maskChar: "9876543210""XXXXXX3210".

Edge cases (all safe — never throws):

  • Empty input → returns "".

  • visibleStart + visibleEnd >= value.length → entire string returned unmasked (overlap rule).

  • Invalid or non-normalised input → masking applied character-by-character on the raw string (spaces, +, hyphens count as characters). No normalisation is performed.

Examples with non-normalised input:

  • mask("+91 98765 43210") (15 chars, default params) → "XXXXXXXXXXX3210"

  • mask("09876543210") (11 chars) → "XXXXXXX3210"

Return

Masked string. Never throws — display-safe by contract.

Parameters

value

Raw string to mask. No normalisation is applied.

visibleStart

Number of leading characters to show unmasked. Default: 0.

visibleEnd

Number of trailing characters to show unmasked. Default: 4.

maskChar

Character to replace masked positions. Default: 'X'.

Samples

check(Mobile.mask("9876543210") == "XXXXXX3210")