将零抑制的八位GTIN-12标识符(表示为UPC-E条形码)转换为完整的12位版本的算法是什么,如UPC-A条码所示?
发布于 2015-07-21 12:26:30
在UPC和UPC-A之间转换GTIN-12标识符的算法可以从以下模式映射中最清楚地看到:
SabcdeNX ⟺ SabN0000cdeX : 0≤N≤2
Sabcde3X ⟺ Sabc00000deX
Sabcde4X ⟺ Sabcd00000eX
SabcdeNX ⟺ Sabcde0000NX : 5≤N≤9在上面的S是数字系统(0或1),X是检查数字。
在伪代码中,如下所示:
Input: A valid eight-digit UPC-E: Assigned to E[].
Output: PASS: Twelve-digit UPC-A representing the UPC-E.
FAIL: Reason.
if E[0] != {0-1} then FAIL: Invalid number system.
if E[6] == {0-2} then PASS: E[0..2] . E[6] . "0000" . E[3..5] . E[7]
if E[6] == "3" then PASS: E[0..3] . "00000" . E[4..5] . E[7]
if E[6] == "4" then PASS: E[0..4] . "00000" . E[5] . E[7]
if E[6] == {5-9} then PASS: E[0..5] . "0000" . E[6] . E[7]发布于 2020-09-30 19:49:06
这重复了@Terry用Java编写的答案中的算法。
switch (data.charAt(6)) {
case '0':
case '1':
case '2': {
data = data.substring(0, 3) + data.charAt(6) + "0000" + data.substring(3, 6) + data.charAt(7);
break;
}
case '3': {
data = data.substring(0, 4) + "00000" + data.substring(4, 6) + data.charAt(7);
break;
}
case '4': {
data = data.substring(0, 5) + "00000" + data.charAt(5) + data.charAt(7);
break;
}
case '5':
case '6':
case '7':
case '8':
case '9': {
data = data.substring(0, 6) + "0000" + data.charAt(6) + data.charAt(7);
break;
}
}发布于 2021-09-07 02:21:02
下面是一个被修正的C#版本。以及一些测试用例。
public string Expand_UPCE_to_UPCA_GTIN12(string upce)
{
return upce[6] switch
{
'0' or '1' or '2' => $"{upce[..3]}{upce[6]}0000{upce[3..6]}{upce[7]}",
'3' => $"{upce[..4]}00000{upce[4..6]}{upce[7]}",
'4' => $"{upce[..5]}00000{upce[5]}{upce[7]}",
_ => $"{upce[..6]}0000{upce[6..]}",
};
}
Console.WriteLine($"Test A: {Expand_UPCE_to_UPCA_GTIN12("02345673")} becomes 023456000073");
Console.WriteLine($"Test B: {Expand_UPCE_to_UPCA_GTIN12("02345147")} becomes 023450000017");
Console.WriteLine($"Test C: {Expand_UPCE_to_UPCA_GTIN12("08679339")} becomes 086700000939");
Console.WriteLine($"Test D: {Expand_UPCE_to_UPCA_GTIN12("06397126")} becomes 063200009716");
Console.WriteLine($"Test E: {Expand_UPCE_to_UPCA_GTIN12("07832309")} becomes 078000003239"); // Diet Dr Pepper 12 fl oz can https://stackoverflow.com/questions/31539005
复制相似问题