/// <summary>
 /// Mask the source string with the default mask char.
 /// </summary>
 /// <param name="sourceValue">Original string to mask.</param>
 /// <param name="style">The masking style to use (all characters or just alpha-nums).</param>
 /// <returns>The masked account number.</returns>
 public static string Mask(this string sourceValue, MaskStyle style)
 {
     return(Mask(sourceValue, DefaultMaskCharacter, 0, style));
 }
 /// <summary>
 /// Mask the source string with the mask char.
 /// </summary>
 /// <param name="sourceValue">Original string to mask.</param>
 /// <param name="maskChar">The character to use to mask the source.</param>
 /// <param name="style">The masking style to use (all characters or just alpha-nums).</param>
 /// <returns>The masked account number.</returns>
 public static string Mask(this string sourceValue, char maskChar, MaskStyle style)
 {
     return(Mask(sourceValue, maskChar, 0, style));
 }
 /// <summary>
 /// Mask the source string with the default mask char except for the last exposed digits.
 /// </summary>
 /// <param name="sourceValue">Original string to mask.</param>
 /// <param name="numExposed">Number of characters exposed in masked value.</param>
 /// <param name="style">The masking style to use (all characters or just alpha-nums).</param>
 /// <returns>The masked account number.</returns>
 public static string Mask(this string sourceValue, int numExposed, MaskStyle style)
 {
     return(Mask(sourceValue, DefaultMaskCharacter, numExposed, style));
 }
        /// <summary>
        /// Mask the source string with the mask char except for the last exposed digits.
        /// </summary>
        /// <param name="sourceValue">Original string to mask.</param>
        /// <param name="maskChar">The character to use to mask the source.</param>
        /// <param name="numExposed">Number of characters exposed in masked value.</param>
        /// <param name="style">The masking style to use (all characters or just alpha-nums).</param>
        /// <returns>The masked account number.</returns>
        public static string Mask(this string sourceValue, char maskChar, int numExposed, MaskStyle style)
        {
            var maskedString = sourceValue;

            if (sourceValue.IsLengthAtLeast(numExposed))
            {
                var builder = new StringBuilder(sourceValue.Length);
                int index   = maskedString.Length - numExposed;

                if (style == MaskStyle.AlphaNumericOnly)
                {
                    CreateAlphaNumMask(builder, sourceValue, maskChar, index);
                }
                else
                {
                    builder.Append(maskChar, index);
                }

                builder.Append(sourceValue.Substring(index));
                maskedString = builder.ToString();
            }

            return(maskedString);
        }