【发布时间】:2013-07-20 22:21:11
【问题描述】:
目前我正在编写一个导入脚本,该脚本使用 php 将银行帐户数据导入 MySQL 数据库。我找到了一些 mt940 解析器,但那些没有做我想做的事或不符合当前的 MT940 标准。所以我编写了自己的简单类来解析我需要的数据。
问题不是,这甚至可能不是 MT940 问题,是我必须过滤双重交易。基本上,这很简单,如果数据库中已经存在完全相同的事务,则不要再次导入。这就是我所做的。
但现在有趣的部分: 有些交易可能在同一天发生两次。例如,某人在同一天进行两次相同的交易[有人可能喜欢我,只是两次给我汇款;)]。 第一次导入时,没有问题。在一个文件中,每个事务都是一个事务。
但现在的问题是: 因为交易不是唯一的(MT940 不会发送任何唯一的交易),所以很难从唯一的交易中过滤掉双重交易。所以如果我从我的银行账户下载了两个 MT940 文件。两个事务中的一个在第一个文件中,另一个在第二个文件中。导入第二个文件时,现在会提示交易是双重交易。
所以.. 我正在为此苦苦挣扎,而且可能我不是唯一一个。大型会计程序也使用 MT940 结构,必须处理相同的问题。
谁知道如何处理这个问题?
其他信息
在事务本身 (:61:) 中,可以获得以下信息:
- 日期
- 金额
- 银行帐号
- 银行账户名称
- 银行账户地址
- 交易说明
如果有人进行两次交易,所有这些信息可能都是相同的。
两次双重交易的例子(当然我修改了交易的名称和银行账户):(这个在一个MT940文件中是双重的,但实际上是两次交易。
:61:130311C000000000029,95N122NONREF
0123456789
:86:/ORDP//NAME/JANSEN W H/ADDR/SOMEROAD 1 9569 GS THECITY/REMI/N
OKIA 3310/ISDT/2013-03-11
【问题讨论】:
-
如果每个字段都相同,我认为没有算法可以确定它是双重交易还是仅仅是一个新的、相同的交易。
-
PS:交易日期是时间戳,还是只是DD/MM/YYYY?
-
没有时间戳,只有 YYMMDD。
-
您是否绝对、肯定地确定真正相同的交易是等价的?
-
@STTLCU:是的,一点一点的相同,看我在帖子中的补充!