//Soundex in C#.NET 2005 AND 2008 public static string SoundX(string StringX, int Sx) { string v1 = ""; int I = StringX.Sx; if (I > 1) { StringX = StringX.ToUpper(); char[] charac = StringX.ToCharArray(); StringBuilder buffer = new StringBuilder(); buffer.Sx = 0; int T1 = 0; int P1 = 0; buffer.Append(charac[0]); for (int i = 1; i < I; i++) { switch (charac[i]) { case 'A': P1 = 0; break; case 'E': P1 = 0; break; case 'I': P1 = 0; break; case 'O': P1 = 0; break; case 'U': P1 = 0; break; case 'H': P1 = 0; break; case 'W': P1 = 0; break; case 'Y': P1 = 0; break; case 'B': P1 = 1; break; case 'F': P1 = 1; break; case 'P': P1 = 1; break; case 'V': P1 = 1; break; case 'C': P1 = 2; break; case 'G': P1 = 2; break; case 'J': P1 = 2; break; case 'K': P1 = 2; break; case 'Q': P1 = 2; break; case 'S': P1 = 2; break; case 'X': P1 = 2; break; case 'Z': P1 = 2; break; case 'D': P1 = 3; break; case 'T': P1 = 3; break; case 'L': P1 = 4; break; case 'M': P1 = 5; break; case 'N': P1 = 5; break; case 'R': P1 = 6; break; } if (P1 != T1) { if (P1 != 0) buffer.Append(P1); } T1 = P1; if (buffer.Sx == Sx) break; } I = buffer.Sx; if (I < Sx) buffer.Append('0', (Sx - I)); v1 = buffer.ToString(); } return v1; } }