文字列を一文字ずつチェックして、いわゆる「ダメ文字」が含まれていないかどうか調べる。 文字列をバイト表現に変換し、2バイト目以降に0x5c(バックスラッシュ記号)を含む「ソ系」ダメ文字、または0x7c(パイプ記号)を含む「ポ系」ダメ文字かどうか判断する。

static bool ContainsNGByte(string text, Encoding encoding)
{
  for (int index = 0; index < text.Length; index++)
  {
    string chr = text.Substring(index, 1);

    byte[] bytes = encoding.GetBytes(chr);

    for (int i = 1; i < bytes.Length; i++)
    {
      // 「ソ系」ダメ文字(バックスラッシュ0x5cを含む)かどうか
      if (bytes[i] == 0x5c)
      {
        Console.WriteLine("{0}は「ソ系」ダメ文字です", chr);

        return true;
      }

      // 「ポ系」ダメ文字(パイプ0x7cを含む)かどうか
      if (bytes[i] == 0x7c)
      {
        Console.WriteLine("{0}は「ポ系」ダメ文字です", chr);

        return true;
      }
    }
  }

  return false;
}
上記メソッドの使用例
static void Main(string[] args)
{
  foreach (string str in new string[] { "ソフトウェア", "シンポジウム", "六十年", "竹取物語", "ダメ文字" })
  {
    Console.WriteLine("チェック対象: {0}", str);

    // Shift-JISの文字列としてチェックする
    if (ContainsNGByte(str, Encoding.GetEncoding(932)))
    {
      Console.WriteLine("  ダメ文字が含まれています");
    }
    else
    {
      Console.WriteLine("  ダメ文字は含まれていません");
    }

    Console.WriteLine();
  }
}
実行結果
チェック対象: ソフトウェア
ソは「ソ系」ダメ文字です
  ダメ文字が含まれています

チェック対象: シンポジウム
ポは「ポ系」ダメ文字です
  ダメ文字が含まれています

チェック対象: 六十年
十は「ソ系」ダメ文字です
  ダメ文字が含まれています

チェック対象: 竹取物語
竹は「ポ系」ダメ文字です
  ダメ文字が含まれています

チェック対象: ダメ文字
  ダメ文字は含まれていません