/*
* Auteur : Joffrey VERDIER
* Date : 08/2006
* Légal : OpenSource © 2007 AVRANCHES
*
*/
using System;
using System.Collections.Generic;
using System.Text;
public class Code128
{
public Code128() { }
///
/// Encode la chaine en code128
///
/// Chaine à transcrire
///
public String Encode(String chaine)
{
int ind = 1;
int checksum = 0;
int mini;
int dummy;
bool tableB;
String code128;
int longueur;
code128 = "";
longueur = chaine.Length;
if (longueur == 0)
{
Console.WriteLine("\n chaine vide");
}
else
{
for (ind = 0; ind < longueur; ind++)
{
if ((chaine[ind] < 32) || (chaine[ind] > 126))
{
Console.WriteLine("\n chaine invalide");
}
}
}
tableB = true;
ind = 0;
while (ind < longueur)
{
if (tableB == true)
{
if ((ind == 0) || (ind + 3 == longueur-1))
{
mini = 4;
}
else
{
mini = 6;
}
mini = mini - 1;
if ((ind + mini) <= longueur - 1)
{
while (mini >= 0)
{
if ((chaine[ind + mini] < 48) || (chaine[ind + mini] > 57))
{
Console.WriteLine("\n exit");
break;
}
mini = mini - 1;
}
}
if (mini < 0)
{
if (ind == 0)
{
code128 = Char.ToString((char) 205);
}
else
{
code128 = code128 + Char.ToString((char)199);
}
tableB = false;
}
else
{
if (ind == 0)
{
code128 = Char.ToString((char) 204);
}
}
}
if (tableB == false)
{
mini = 2;
mini = mini - 1;
if (ind + mini < longueur)
{
while (mini >= 0)
{
if (((chaine[ind + mini]) < 48) || ((chaine[ind]) > 57))
{
break;
}
mini = mini - 1;
}
}
if (mini < 0)
{
dummy = Int32.Parse(chaine.Substring(ind, 2));
Console.WriteLine("\n dummy ici : "+dummy);
if (dummy < 95)
{
dummy = dummy + 32;
} else
{
dummy = dummy + 100;
}
code128 = code128 + (char)(dummy);
ind = ind + 2;
}
else
{
code128 = code128 + Char.ToString((char) 200);
tableB = true;
}
}
if (tableB == true)
{
code128 = code128 + chaine[ind];
ind = ind + 1;
}
}
for (ind = 0; ind <= code128.Length-1; ind++)
{
dummy = code128[ind];
Console.WriteLine("\n et voila dummy : "+dummy);
if (dummy < 127)
{
dummy = dummy - 32;
}
else
{
dummy = dummy - 100;
}
if (ind == 0)
{
checksum = dummy;
}
checksum = (checksum + (ind) * dummy) % 103;
}
if (checksum < 95)
{
checksum = checksum + 32;
}
else
{
checksum = checksum + 100;
}
code128 = code128 + Char.ToString((char) checksum)
+ Char.ToString((char) 206);
return code128;
}
}