【问题标题】:How do I parse magnetic strip card data input in Java Swing textbox?如何解析 Java Swing 文本框中的磁条卡数据输入?
【发布时间】:2011-09-27 02:35:35
【问题描述】:

我正在尝试编写一个应用程序,该应用程序将使用通过扫描的条形码找到的或嵌入磁条卡数据中的 id 密钥来搜索和检索用户的个人资料。后一个是让我伤心的。在搜索用户配置文件之前,需要解析磁条数据。

我的问题,有没有办法捕捉扫描到文本框中的文本并在它显示在文本框中之前对其进行解析?

我的阅读器/扫描仪是键盘仿真类型,因此好像在条带上编码的每个字符都在文本框中输入。我想一个解决方案(但它是最好的吗?)将拦截每个击键(由磁条阅读器模拟),将它们存储在缓冲区中并显示一个空字符,直到读取字符串结束。一旦读取了卡片数据的结尾,我就可以解析并显示 id 的 id 部分。问题是……如果卡的数据字符串作为单独的字符按键输入,你怎么知道它是结尾?

【问题讨论】:

  • 请提供一个指向设备 API 的链接和一个 sscce 显示您尝试过的内容。
  • 什么是文本框?我不知道任何同名的 Swing 组件?具体并使用正确的类名,这样我们就不必猜测您在说什么。
  • @trashgod MSR 没有 API,因为它是一个键盘模拟器。在考虑更多问题的同时,在发布后,我决定放置一个带有 ActionListener 的按钮,该按钮解析 MSR 读取的数据。这可行,但缺点是显示原始数据。
  • 我想我可以按照 Rajeev 和 Camickr 的建议解决这个问题,使用 DocumentFilter 来监听起始标记字符,开始缓冲字符并在遇到结束标记时停止我会解析数据。对于每个缓冲的字符,我会将字段的文本替换为空字符串,并且只有在到达结束标记时才将其设置为解析后的 id。这应该工作。
  • 我明白了。 @Rajeev 即使在不知道具体 API 的情况下也能够提出一种方法,但链接可能会对未来的访问者有所帮助。随着reputation 的增长,不要忘记投票。

标签: java swing text-parsing magnetic-cards


【解决方案1】:

第一个问题的答案是在文本字段的 Document 上设置 DocumentFilter。

..如果他们得到,你怎么知道它是卡片数据字符串的结尾 作为单个字符按键输入?

您的 MSR 肯定会发出 START_STRING 和 END_OF_LINE_STRING 作为一些预定义字符的组合。读取 MSR 设备的数据规范。一旦你有了它,你就可以实现类似于这个伪代码的过滤器的 insertString

if str == START_CHARACTER
    then clear buffer

if str == EOL_CHARACTER
    then parse and do super.insertString

else
    append string to buffer

同样,解析逻辑可以使用 MSR 的数据规范来实现。

(MSR = 磁条阅读器)

【讨论】:

  • Rajeev,这和我想多了之后的想法很相似。磁条数据(如果编码类似于信用卡)具有开始和结束标记字符。只是为了测试它,我放了一个按钮并附加了一个 ActionListener 来解析文本。这可行,但我只是不喜欢在输入字段中看到原始数据。我知道一旦按钮侦听器触发,我就可以替换它,但我什至不想显示原始数据。我正在尝试查看是否有办法在显示之前对其进行拦截,对其进行解析并仅在字段中插入原始数据的 id 部分。
  • 我想我可以像你和 camickr 建议的那样做,并且有一个 DocumentFilter 来寻找起始哨兵。一旦找到,所有后续字符以及哨兵都可以放入缓冲区中,直到找到结束哨兵。对于输入的每个字符,过滤器将用空字符串替换字段的文本。一旦到达终点哨兵,它会将数据解析为域对象,并在字段中显示从磁条检索到的 id。今晚我试试看。
【解决方案2】:

您应该能够使用Document Filter 截取添加到JTextField 文档中的文本。然后,当您收到字符串结尾字符时,您可以解析文本并将其插入到文本字段中。

【讨论】:

  • 感谢 camickr,这与 Rajeev 的建议类似,我开始认为这将是解决方案。我只需要监听开始和结束标记字符并在两者之间缓冲数据。
  • @Eric,实际上我比 Rajeev 早一个小时提出了建议。您的问题是关于在将文本添加到我回答的文本字段之前捕获文本。因为我不知道你的数据格式,所以我把解析留给你。
  • 啊!我只是注意到该网站按时间顺序显示它们。我只是假设我遇到的第一个答案是第一个提交的答案。我很抱歉。你是对的,我的问题是关于如何不显示原始数据,而是显示其中的特定数据。至于数据格式,有很多,因为我想使用各种形式来定位记录:按名称、按条形码、带有磁条的会员卡或 DMV 许可证。再次感谢。
猜你喜欢
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
相关资源
最近更新 更多