Created
June 21, 2022 15:54
-
-
Save mrpmorris/c0b217888bb3a98d3420fb0fd6b5689a to your computer and use it in GitHub Desktop.
ObscureEmailAddress
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static class StringHelper | |
{ | |
public const byte DefaultUnobscuredLength = 3; | |
public enum Keep { Start, End }; | |
public static string? ObscureEmailAddress(string? value) | |
{ | |
if (string.IsNullOrEmpty(value)) | |
return value; | |
string?[] parts = value.Split('@'); | |
Keep keep = Keep.Start; | |
for(int i = 0; i < parts.Length; i++) | |
{ | |
parts[i] = Obscure(parts[i], keep, 3); | |
keep = Keep.End; | |
} | |
return String.Join('@', parts); | |
} | |
public static string? Obscure(string? value, Keep keep, int unobscuredLength = DefaultUnobscuredLength) | |
{ | |
if (string.IsNullOrEmpty(value)) | |
return value; | |
if (unobscuredLength < 0) | |
throw new ArgumentOutOfRangeException(message: "Must be at least 0", paramName: nameof(unobscuredLength)); | |
// Ensure we obscure at least half of the string, and reveal at most DefaultUnobscuredLength (3) chars. | |
unobscuredLength = Math.Min(unobscuredLength, value.Length / 2); | |
return keep switch | |
{ | |
Keep.Start => value[0..unobscuredLength] + new string('*', value.Length - unobscuredLength), | |
_ => new string('*', value.Length - unobscuredLength) + value[^unobscuredLength..] | |
}; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment