barcode - 如何读取 NADRA NIC 上的条形码?

标签 barcode

我正在编写一个从 NADRA (http://www.nadra.gov.pk/index.php?option=com_content&view=article&id=6&Itemid=9) 发布的 NIC 读取条形码的应用程序。 NADRA 向巴基斯坦公民颁发 CNIC。我想读取这些印在 CNIC 上的条码。 NADRA 对姓名、父亲姓名、地址、出生日期等信息进行了编码,但这些信息存储在乌尔都语中。我成功阅读了这些条形码,但问题是,我无法将它们的字符集转换为乌尔都语。我安装了乌尔都语字体,比如 Noori Nistalique、Aswad 等等,但这些字符集只是显示了一堆字符,而不是有意义的信息。当我用简单的英语解码这些条形码时,它显示的数字信息是正确的,但不显示乌尔都语中的信息。

有没有人尝试过读取这些条码并成功解码?请帮助我,或指导我我必须做什么......?

这是我阅读的样本,这是简单的英语:

A0U1200708091232 13501722 T31 2602 -E'/



这是我读过的一个样本,这是在乌尔都语中:

آڑم٠٢٨٧٨٧٠١٨٠ء١٢٠٠٧٠٨٠٩١٢٣٢ ١٣٥٠١٧٢٢ ٹ٣١ص ٢٦٠٢ -فؓف ؐف-فڈف┴ف ‌،ف٩ف┴ف ‌١ف-فؐف"ففف ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌



如您所见,数字信息是相同的,但用乌尔都语编码的信息是困惑的......

任何帮助???

最佳答案

NADRA 做了一个技巧,NADRA 实际上是使用最后两个字符形成一个单词的十六进制值,例如如果 \u0622是 Alif(假设)然后 NADRA 只使用最后两个字符进行编码,22所以这只是诀窍。我附上了一些将十六进制转换为乌尔都语的代码,读取条形码数据,将其转换为十六进制字符串,然后将此字符串传递给此函数,您将获得乌尔都语中的所有信息,只需将此字符串放在一些支持乌尔都语或阿拉伯语的 View 中(Android)、组件 (Java) 或者如果您使用的是 C#,则将其放入标签中。

public class ConvertToUrdu {

public static String convertToUrdu(String text)
{
    StringBuilder sb = new StringBuilder();

    String[] characters = text.split(",");

    for(String character : characters)
    {


        //if (ListDigits.Contains(ch))
        //{
        //    continue;
        //}
        switch (character)
        {
            case "20":
                sb.append(" ");
                break;

            case "22":
                sb.append("\u0622");
                break;

            case "27":
                sb.append("\u0627");
                break;

            case "13":
                sb.append("\u0613");
                break;

            case "28":
                sb.append("\u0628");
                break;

            case "2B":
                sb.append("\u062b");
                break;

            case "86":
                sb.append("\u0686");
                break;

            case "88":
                sb.append("\u0688");
                break;

            case "2F":
                sb.append("\u062f");
                break;

            case "10":
                sb.append("\u0610");
                break;

            case "39":
                sb.append("\u0639");
                break;

            case "41":
                sb.append("\u0641");
                break;

            case "3A":
                sb.append("\u063a");
                break;

            case "AF":
                sb.append("\u06af");
                break;

            case "2D":
                sb.append("\u062d");
                break;

            case "BE":
                sb.append("\u06be");
                break;

            case "CC":
                sb.append("\u06cc");
                break;

            case "36":
                sb.append("\u0636");
                break;

            case "2C":
                sb.append("\u062c");
                break;

            case "2E":
                sb.append("\u062e");
                break;

            case "43":
                sb.append("\u0643");
                break;

            case "12":
                sb.append("\u0612");
                break;

            case "44":
                sb.append("\u0644");
                break;

            case "45":
                sb.append("\u0645");
                break;

            case "BA":
                sb.append("\u06ba");
                break;

            case "46":
                sb.append("\u0646");
                break;

            case "29":
                sb.append("\u0629");
                break;

            case "A9":
                sb.append("\u06a9");
                break;

            case "C1":
                sb.append("\u06c1");
                break;

            //case "45":
            //    sb.Append("\u0645");
            //    break;

            case "7E":
                sb.append("\u067e");
                break;

            case "42":
                sb.append("\u0642");
                break;

            case "91":
                sb.append("\u0691");
                break;

            case "31":
                sb.append("\u0631");
                break;

            case "35":
                sb.append("\u0635");
                break;

            case "33":
                sb.append("\u0633");
                break;

            case "79":
                sb.append("\u0679");
                break;

            case "2A":
                sb.append("\u062a");
                break;

            case "21":
                sb.append("\u0621");
                break;

            case "38":
                sb.append("\u0638");
                break;

            case "37":
                sb.append("\u0637");
                break;

            //case "48":
            //    sb.Append("\\u0635\u0644\u0649\u0020\u0627\u0644\u0644\u0647\u0020\u0639\u0644\u064a\u0647\u0020\u0648\u0633\u0644\u0645");
            //    break;

            case "48":
                sb.append("\u0648");
                break;

            case "98":
                sb.append("\u0698");
                break;

            case "34":
                sb.append("\u0634");
                break;

            case "D2":
                sb.append("\u06d2");
                break;

            case "30":
                sb.append("\u0630");
                break;

            case "32":
                sb.append("\u0632");
                break;

            case "60":
                sb.append("\u0660");
                break;

            case "61":
                sb.append("\u0661");
                break;

            case "62":
                sb.append("\u0662");
                break;

            case "63":
                sb.append("\u0663");
                break;

            case "64":
                sb.append("\u0664");
                break;

            case "65":
                sb.append("\u0665");
                break;

            case "66":
                sb.append("\u0666");
                break;

            case "67":
                sb.append("\u0667");
                break;

            case "68":
                sb.append("\u0668");
                break;

            case "69":
                sb.append("\u0669");
                break;

            case "0C":
                sb.append(" \u200c");
                break;

            case "D4":
                sb.append("\u06d4");
                break;

            //case "0C":
            //    sb.Append("\u060c");
            //    break;

            case "1F":
                sb.append("\u061f");
                break;

            case "02":
                sb.append("\u0602");
                break;

            case "1B":
                sb.append("\u061b");
                break;

            case "7b":
                sb.append("\u007b");
                break;

            case "7D":
                sb.append("\u007d");
                break;
            //default:
            //    sb.Append(ch);
            //    break;
        }
    }

    return sb.toString();
}
}

我为 Java 编写了此代码,您可以将其转换为任何其他语言。

希望最好的 :-)

笔记
为方便起见,我在原始字符串中的两个字符后添加了 ',',例如A0U1200708091232 -> A0,U1,20,07,08,09,12,32 .只是为了调试,所以这个函数实际上将第二个字符串转换为乌尔都语。

编辑
根据评论,这是我将字符串转换为十六进制的函数,我用 C# 编写的
private string convertToHex(string text)
    {
        StringBuilder sb = new StringBuilder();
        foreach (char c in text)
        {
            if (c == '\n')
            {
                sb.Append('\n');
                sb.Append(',');
            }
            else
            {
                sb.Append(String.Format("{0:X}", (int)c));
                sb.Append(',');
                //sb.Append((int)c + " ");
            }
        }

        return sb.ToString();
    }

在 JAVA 中,您可以通过编写 String hex = String.format("%04x", (int) c); 来转换

关于barcode - 如何读取 NADRA NIC 上的条形码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13472824/

相关文章:

c# - 条形码(代码 39)生成

python - 无法分配给函数调用 Error-Python

android - 如何通过zxing scanning intent请求扫描图片?

reactjs - 结合 React 和 React-Native

ios - 如何拍摄模糊的照片(例如从 iPad 2 拍摄的照片)并使用 iOS API 对其进行锐化?

android - 如何从条形码在线获取产品名称?

java - 使用 Java Zxing API 将条码内容写为条码下方的标签

barcode - 在模板中生成条形码以用于 Apache FOP

android - 如何在不安装barcodescanner app的情况下使用ZXing库

c# - 无法使用适用于 .NET 的 EMDK