mask

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

Masks an ESIC number for PII-safe display.

Default: last 4 digits visible, remainder replaced by maskChar ("XXXXXXXXXXXXX4567"). Operates character-by-character on the raw input — does not normalize.

Edge cases (all safe — never throws):

  • Empty input → returns "".

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

  • Non-normalized input → masking applied character-by-character on the raw string.

Return

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

Parameters

value

Raw ESIC number string. No normalization 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(ESIC.mask("12345678901234567") == "XXXXXXXXXXXXX4567")