using System.Collections.Generic;
namespace DataSwappingApp
static void Main(string[] args)
Console.WriteLine("Enter the text to be swapped:");
string inputText = Console.ReadLine();
Console.WriteLine("Select the type of swapping:");
Console.WriteLine("1. Record-Level Swapping");
Console.WriteLine("2. Attribute-Level Swapping");
Console.WriteLine("3. K-Anonymity");
Console.WriteLine("4. L-Diversity");
while (!int.TryParse(Console.ReadLine(), out swapType) || (swapType < 1 || swapType > 4))
Console.WriteLine("Please enter a valid option (1, 2, 3, or 4):");
string swappedText = string.Empty;
swappedText = PerformRecordLevelSwapping(inputText);
swappedText = PerformAttributeLevelSwapping(inputText);
Console.WriteLine("Enter the value of k for k-anonymity:");
while (!int.TryParse(Console.ReadLine(), out k) || k <= 0)
Console.WriteLine("Please enter a valid value for k (greater than 0):");
swappedText = PerformKAnonymity(inputText, k);
Console.WriteLine("Enter the value of l for l-diversity:");
while (!int.TryParse(Console.ReadLine(), out l) || l <= 0)
Console.WriteLine("Please enter a valid value for l (greater than 0):");
swappedText = PerformLDiversity(inputText, l);
Console.WriteLine("Original Text: " + inputText);
Console.WriteLine("Swapped Text: " + swappedText);
Console.WriteLine("\nPress any key to exit...");
static string PerformRecordLevelSwapping(string text)
char[] characters = text.ToCharArray();
Random random = new Random();
for (int i = characters.Length - 1; i > 0; i--)
int j = random.Next(0, i + 1);
char temp = characters[i];
characters[i] = characters[j];
return new string(characters);
static string PerformAttributeLevelSwapping(string text)
char[] characters = text.ToCharArray();
Random random = new Random();
for (int i = 0; i < characters.Length; i++)
int j = random.Next(0, characters.Length);
char temp = characters[i];
characters[i] = characters[j];
return new string(characters);
static string PerformKAnonymity(string text, int k)
List<string> groups = new List<string>();
while (startIndex < text.Length)
int length = Math.Min(k, text.Length - startIndex);
groups.Add(text.Substring(startIndex, length));
Random random = new Random();
groups = groups.OrderBy(g => random.Next()).ToList();
return string.Join("", groups);
static string PerformLDiversity(string text, int l)
List<string> equivalenceClasses = new List<string>();
while (startIndex < text.Length)
int length = Math.Min(l, text.Length - startIndex);
equivalenceClasses.Add(text.Substring(startIndex, length));
Random random = new Random();
foreach (var eqClass in equivalenceClasses)
char[] characters = eqClass.ToCharArray();
for (int i = 0; i < characters.Length; i++)
int j = random.Next(0, characters.Length);
char temp = characters[i];
characters[i] = characters[j];
equivalenceClasses[equivalenceClasses.IndexOf(eqClass)] = new string(characters);
return string.Join("", equivalenceClasses);