Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在MT940中查找双重事务_Php_Mt940 - Fatal编程技术网

Php 如何在MT940中查找双重事务

Php 如何在MT940中查找双重事务,php,mt940,Php,Mt940,目前,我正在编写一个导入脚本,该脚本使用php将银行帐户数据导入MySQL数据库。我发现了一些mt940 pharser,但它们没有达到我想要的效果,或者不符合当前的mt940标准。因此,我编写了自己的简单类来解析我需要的数据 问题是,我必须过滤双重事务,这甚至可能不是MT940的问题。在basic中,这非常简单,如果数据库中已经存在完全相同的事务,则不要再次导入。这就是我所做的 但现在有趣的部分是: 有些交易可能在同一天发生两次。例如,有人在同一天做了两次相同的交易[有人可能喜欢我,只是把钱寄

目前,我正在编写一个导入脚本,该脚本使用php将银行帐户数据导入MySQL数据库。我发现了一些mt940 pharser,但它们没有达到我想要的效果,或者不符合当前的mt940标准。因此,我编写了自己的简单类来解析我需要的数据

问题是,我必须过滤双重事务,这甚至可能不是MT940的问题。在basic中,这非常简单,如果数据库中已经存在完全相同的事务,则不要再次导入。这就是我所做的

但现在有趣的部分是: 有些交易可能在同一天发生两次。例如,有人在同一天做了两次相同的交易[有人可能喜欢我,只是把钱寄给我两次;)]。 第一次导入时,没有问题。在一个文件中,每个事务都是一个事务

但现在的问题是: 因为事务不是唯一的(MT940不会为事务发送任何唯一的),所以很难从唯一事务中筛选出双重事务。因此,如果我从我的银行帐户下载了两个MT940文件。两个事务中的一个在第一个文件中,另一个在第二个文件中。导入第二个文件时,它现在会告诉我该事务是双重事务

所以。。我正在努力解决这个问题,也许我不是唯一一个。此外,大型会计项目使用MT940结构,必须处理相同的问题

谁知道怎么处理这件事

其他信息

在事务本身(:61:)中,可以使用以下信息:

  • 日期
  • 数量
  • 银行帐号
  • 银行帐户名
  • 银行帐户地址
  • 事务描述
如果有人做了两次交易,所有这些信息都是相同的

两个double事务的示例(当然我修改了事务的名称和bankaccount):(这一个在一个MT940文件中是double,但实际上是两个事务)


假设您有3个事务:A、B和C

A和B是重复的,因此必须丢弃B

C是一个不同的事务,但它在各个方面都与a相同

根据你在问题中提供的数据,A=B=C是正确的。它们完全相同。没有办法通过阅读它们的内容来确定谁是真品,谁是复制品。以下所有场景都可能有效:

  • C是B的副本,B是a的副本。丢弃B和C并保留a
  • B是与a相同的真实交易。C是B的副本。放弃B
  • 这是三笔真正相同的交易。把它们都留下
  • [等等]
  • 正如你所看到的,没有一种算法可以100%地决定哪种情况是正确的。既然我们谈论的是钱,那么一切不到100%确定性的东西都不能被接受

    那怎么办呢

    如果计算机无法确定,就让人类来做吧。 记录冲突时,请编制一个列表。处理所有没有冲突的事务,完成批处理后,将冲突列表发送给人工操作员,让他/她从真实事务中筛选出重复的事务(即使我仍然想知道,如果它们在各个方面都相同,它们如何排序)


    如果您发现操作员知道如何对其进行排序,如果可能的话,尝试推断他们的人工算法。

    MT940语句消息有期初余额和期末余额,对吗?因此,如果你有一个包含两个相同交易的对账单,银行账户余额将反映这一点

    如果您“清理”了看起来重复的数据,并不意味着事务没有发生。如果您进行此清理是为了将940中的数据放入具有唯一约束冲突的数据库,该数据库不允许过帐相同的事务,那么以后可能会出现问题,或者如果有人将数据库中的事务总数与对账单中的期末余额进行比较,则会立即出现问题


    更好的方法可能是生成一些额外的关键信息(可能为每个语句行增加一个序列号),您可以添加这些信息来区分其他明显相同的事务,并在不违反约束的情况下将它们加载到数据库中。

    一个答案指出,mt940消息包含一个起始值(完)余额。在浏览消息时,使用起始余额信息为每笔交易创建当前余额。将当前余额与交易的起息日期以及账户代码结合使用,以创建唯一标识符。例如,您可以通过连接它们并使用任何函数来实现此目的编程语言可用于创建MD5哈希。

    如果每个字段都相同,我认为没有算法可以确定它是一个双精度的事务,还是仅仅是一个新的、相同的事务。PS:事务日期是时间戳,还是仅为DD/MM/YYYY?没有时间戳,仅为YYMMDD。您是否绝对肯定真正相同的事务戳离子一点一点都是等价的?@STTLCU:是的,一点一点都是相同的,请看我在帖子中的添加!这也是我一直在想的。现在唯一的问题是,如果导入重叠了一天,那么在接下来的两天中,应该存在重叠,以确保不会错过任何事务。这意味着他们必须手动检查大约200个事务r每次导入。可能199是有效的双倍数…但解决了这个问题,我认为这就是它的方式!这并不能提供问题的答案。一旦你有足够的数据,你就可以;相反,-好的,让我更清楚一点。用例是将MT940文件导入数据库。当你想创建银行sta时,你可以这样做数据可用性
    :61:130311C000000000029,95N122NONREF          
    0123456789
    :86:/ORDP//NAME/JANSEN W H/ADDR/SOMEROAD 1 9569 GS THECITY/REMI/N
    OKIA 3310/ISDT/2013-03-11