// // DefaultAnonymizer.cs // // Copyright (c) František Boháček. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. namespace Anonymizer; /// public class DefaultAnonymizer : IAnonymizer { private readonly Random _random; private readonly HashSet _generated; private readonly Dictionary _ids; private readonly Dictionary _names; /// /// Initializes a new instance of the class. /// public DefaultAnonymizer() { _random = new Random(); _generated = new HashSet(); _ids = new Dictionary(); _names = new Dictionary(); } /// public string AnonymizeName(string name) { if (!_names.ContainsKey(name)) { var generatedName = string.Empty; for (var i = 0; i < 10; i++) { generatedName += (char)_random.Next('A', 'Z'); } _names[name] = generatedName; } return _names[name]; } /// public long AnonymizeId(long id) { if (!_ids.ContainsKey(id)) { var generated = _random.Next(); if (_generated.Contains(generated)) { return AnonymizeId(id); } _ids[id] = generated; _generated.Add(generated); } return _ids[id]; } /// public int AnonymizeId(int id) { if (!_ids.ContainsKey(id)) { var generated = _random.Next() & 0xFFFFFFFF; if (_generated.Contains(generated)) { return AnonymizeId(id); } _ids[id] = generated; _generated.Add(generated); } return (int)_ids[id]; } /// public short AnonymizeId(short id) { if (!_ids.ContainsKey(id)) { var generated = _random.Next() & 0xFFFF; if (_generated.Contains(generated)) { return AnonymizeId(id); } _ids[id] = generated; _generated.Add(generated); } return (short)_ids[id]; } /// public (long Id, string Name) Anonymize(long id, string name) => (AnonymizeId(id), AnonymizeName(name)); }