如何解析 QR Scanner 发送的数据
How do I parse data sent from QR Scanner
我正在开发一个应用程序,它获取从 QR 码扫描发送的文本数据并从 the CDC crosswalk tables 执行查找。这是一个示例:
0110358160825436172302061095EJ7
上面发布的字符串数据包含 NDC 编号、疫苗批号和有效期。但是,我不知道如何解析这些字段。
我该怎么做?
这是完成这项工作的 PowerShell 代码。下面是在 C# 代码中应该工作的内容。
$QRScan = '0110358160825436172302061095EJ7';
$GS1AppID1 = $QRScan.Substring(0,2);
$GTIN = $QRScan.Substring(2,14);
$GS1AppID2 = $QRScan.Substring(16,2);
$YYMMDD = $QRScan.Substring(18,6);
$GS1AppID3 = $QRScan.Substring(24,2);
$LotNumber = $QRScan.Substring(26);
Write-Host "GS1AppID1: $GS1AppID1"
Write-Host "GTIN: $GTIN"
Write-Host "GS1AppID2: $GS1AppID2"
Write-Host "YYMMDD: $YYMMDD"
Write-Host "GS1AppID3: $GS1AppID3"
Write-Host "LotNumber: $LotNumber"
这是输出:
GS1AppID1: 01
GTIN: 10358160825436
GS1AppID2: 17
YYMMDD: 230206
GS1AppID3: 10
LotNumber: 95EJ7
我没有在 C# 中测试过,但它应该非常接近您的需要。
string QRScan = "0110358160825436172302061095EJ7";
string GS1AppID1 = QRScan.Substring(0,2);
string GTIN = QRScan.Substring(2,14);
string GS1AppID2 = QRScan.Substring(16,2);
string YYMMDD = QRScan.Substring(18,6);
string GS1AppID3 = QRScan.Substring(24,2);
string LotNumber = QRScan.Substring(26);
注意:Substring can throw errors,因此在代码中使用它时请记住这一点。
正则表达式版本
虽然 Substring 完成了工作,但问题被标记为正则表达式。
Regex C# 控制台版本(第一次在 C# 中做正则表达式命名组 - 有更简单的方法吗?):
static void Main() {
string RE = @"^(?<GS1AppID1>\d{2})(?<GTIN>\d{14})(?<GS1AppID2>\d{2})(?<YYMMDD>\d{6})(?<GS1AppID3>\d{2})(?<LotNumber>\w+)$";
var Parser = new Regex(RE);
string QRScan = "0110358160825436172302061095EJ7";
Match Matches = Parser.Match(QRScan);
if(Matches.Success) {
Console.WriteLine("GS1AppID1: {0}", Matches.Groups["GS1AppID1"].Value);
Console.WriteLine("GTIN: {0}", Matches.Groups["GTIN"].Value);
Console.WriteLine("GS1AppID2: {0}", Matches.Groups["GS1AppID2"].Value);
Console.WriteLine("YYMMDD: {0}", Matches.Groups["YYMMDD"].Value);
Console.WriteLine("GS1AppID3: {0}", Matches.Groups["GS1AppID3"].Value);
Console.WriteLine("LotNumber: {0}", Matches.Groups["LotNumber"].Value);
}
}
正则表达式 PowerShell(仅用于比较。):
$RE = '^(?<GS1AppID1>\d{2})(?<GTIN>\d{14})(?<GS1AppID2>\d{2})(?<YYMMDD>\d{6})(?<GS1AppID3>\d{2})(?<LotNumber>\w+)$';
$QRScan = '0110358160825436172302061095EJ7';
if($QRScan -match $RE) {
Write-Host "GS1AppID1: $($Matches.GS1AppID1)"
Write-Host "GTIN: $($Matches.GTIN)"
Write-Host "GS1AppID2: $($Matches.GS1AppID2)"
Write-Host "YYMMDD: $($Matches.YYMMDD)"
Write-Host "GS1AppID3: $($Matches.GS1AppID3)"
Write-Host "LotNumber: $($Matches.LotNumber)"
}
我正在开发一个应用程序,它获取从 QR 码扫描发送的文本数据并从 the CDC crosswalk tables 执行查找。这是一个示例:
0110358160825436172302061095EJ7
上面发布的字符串数据包含 NDC 编号、疫苗批号和有效期。但是,我不知道如何解析这些字段。
我该怎么做?
这是完成这项工作的 PowerShell 代码。下面是在 C# 代码中应该工作的内容。
$QRScan = '0110358160825436172302061095EJ7';
$GS1AppID1 = $QRScan.Substring(0,2);
$GTIN = $QRScan.Substring(2,14);
$GS1AppID2 = $QRScan.Substring(16,2);
$YYMMDD = $QRScan.Substring(18,6);
$GS1AppID3 = $QRScan.Substring(24,2);
$LotNumber = $QRScan.Substring(26);
Write-Host "GS1AppID1: $GS1AppID1"
Write-Host "GTIN: $GTIN"
Write-Host "GS1AppID2: $GS1AppID2"
Write-Host "YYMMDD: $YYMMDD"
Write-Host "GS1AppID3: $GS1AppID3"
Write-Host "LotNumber: $LotNumber"
这是输出:
GS1AppID1: 01
GTIN: 10358160825436
GS1AppID2: 17
YYMMDD: 230206
GS1AppID3: 10
LotNumber: 95EJ7
我没有在 C# 中测试过,但它应该非常接近您的需要。
string QRScan = "0110358160825436172302061095EJ7";
string GS1AppID1 = QRScan.Substring(0,2);
string GTIN = QRScan.Substring(2,14);
string GS1AppID2 = QRScan.Substring(16,2);
string YYMMDD = QRScan.Substring(18,6);
string GS1AppID3 = QRScan.Substring(24,2);
string LotNumber = QRScan.Substring(26);
注意:Substring can throw errors,因此在代码中使用它时请记住这一点。
正则表达式版本
虽然 Substring 完成了工作,但问题被标记为正则表达式。
Regex C# 控制台版本(第一次在 C# 中做正则表达式命名组 - 有更简单的方法吗?):
static void Main() {
string RE = @"^(?<GS1AppID1>\d{2})(?<GTIN>\d{14})(?<GS1AppID2>\d{2})(?<YYMMDD>\d{6})(?<GS1AppID3>\d{2})(?<LotNumber>\w+)$";
var Parser = new Regex(RE);
string QRScan = "0110358160825436172302061095EJ7";
Match Matches = Parser.Match(QRScan);
if(Matches.Success) {
Console.WriteLine("GS1AppID1: {0}", Matches.Groups["GS1AppID1"].Value);
Console.WriteLine("GTIN: {0}", Matches.Groups["GTIN"].Value);
Console.WriteLine("GS1AppID2: {0}", Matches.Groups["GS1AppID2"].Value);
Console.WriteLine("YYMMDD: {0}", Matches.Groups["YYMMDD"].Value);
Console.WriteLine("GS1AppID3: {0}", Matches.Groups["GS1AppID3"].Value);
Console.WriteLine("LotNumber: {0}", Matches.Groups["LotNumber"].Value);
}
}
正则表达式 PowerShell(仅用于比较。):
$RE = '^(?<GS1AppID1>\d{2})(?<GTIN>\d{14})(?<GS1AppID2>\d{2})(?<YYMMDD>\d{6})(?<GS1AppID3>\d{2})(?<LotNumber>\w+)$';
$QRScan = '0110358160825436172302061095EJ7';
if($QRScan -match $RE) {
Write-Host "GS1AppID1: $($Matches.GS1AppID1)"
Write-Host "GTIN: $($Matches.GTIN)"
Write-Host "GS1AppID2: $($Matches.GS1AppID2)"
Write-Host "YYMMDD: $($Matches.YYMMDD)"
Write-Host "GS1AppID3: $($Matches.GS1AppID3)"
Write-Host "LotNumber: $($Matches.LotNumber)"
}