//
// 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));
}