C39字體"條"過細(前后帶*),打印精度不夠或磨損,就不易識別,轉而使用Code128.
但直接用Code128字體做出的條形碼掃描設備識別不了.后查閱才發現Code128字體與Code128條碼並不是一回事.
現記錄轉換方法於下:

class Code128ex { /// <summary> /// 轉換成Code128A /// </summary> public static string ExCode128A(string barcode) { string result = ""; int checksum = 103; int j = 1; for (int ii = 0; ii < barcode.Length; ii++) { if (barcode[ii] >= 32) { checksum += (barcode[ii] - 32) * (ii + 1); } else { checksum += (barcode[ii] + 64) * (ii + 1); } } checksum = checksum % 103; if (checksum < 95) { checksum += 32; } else { checksum += 100; } result = Convert.ToChar(203) + barcode.ToString() + Convert.ToChar(checksum) + Convert.ToChar(206); return result; } /// <summary> /// 轉換成Code128B /// </summary> public static string ExCode128B(string barcode) { string result = ""; int checksum = 104; int j = 1; for (int ii = 0; ii < barcode.Length; ii++) { if (barcode[ii] >= 32) { checksum += (barcode[ii] - 32) * (ii + 1); } else { checksum += (barcode[ii] + 64) * (ii + 1); } } checksum = checksum % 103; if (checksum < 95) { checksum += 32; } else { checksum += 100; } result = Convert.ToChar(204) + barcode.ToString() + Convert.ToChar(checksum) + Convert.ToChar(206); return result; } /// <summary> /// 轉換成Code128C /// </summary> public static string ExCode128C(string barcode) { string result = ""; int checksum = 105; int j = 1; for (int ii = 0; ii < barcode.Length; ii++) { if (ii % 2 == 0) { checksum += Convert.ToInt32(barcode.Substring(ii, 2)) * j; if (Convert.ToInt32(barcode.Substring(ii, 2)) < 95) { result += Convert.ToChar(Convert.ToInt32(barcode.Substring(ii, 2)) + 32); } else { result += Convert.ToChar(Convert.ToInt32(barcode.Substring(ii, 2)) + 100); } j++; } ii++; } checksum = checksum % 103; if (checksum < 95) { checksum += 32; } else { checksum += 100; } result = Convert.ToChar(205) + result + Convert.ToChar(checksum) + Convert.ToChar(206); return result; } }