Создать уникальный ключ для банковских операций

Я хочу постоянно импортировать банковские операции через HBCI. Проблема в том, что они не имеют ни уникального ключа, ни точной отметки времени (отметка времени указывается только в разрешении дня, т.е. всегда в 12:00).

Это данные, которые я получаю от API

введите описание изображения здесь

Генерация хеша для всех полей может привести к ложным срабатываниям (если кто-то передает одно и то же значение в один и тот же день с тем же текстом цели и т. Д.)

Как я могу избежать двойного импорта и генерировать уникальный ключ?

1 ответ

Решение
/**
 * Generate a unique ID per transaction
 * We assume, that all transactions of a day are always present in the fetched transactions
 * (after a while, very old transactions might not appear)
 * So we generate a continues key per day, combine it with the date and have a globally unique key
 *
 * @return Transaction[]
 */
public static function getKeyedTransactions()
{
    $transactions = self::getTransactions();
    $result = [];
    $dateCounters = array();
    foreach($transactions as $transaction) {
        $date = $transaction->getDate()->format('Ymd');
        if (!isset($dateCounters[$date])) {
            $dateCounters[$date] = 0;
        }
        $dateCounters[$date]++;
        $uniqId = $date . sprintf('%05d', $dateCounters[$date]);
        $result[$uniqId] = $transaction;
    }
    return $result;
}
Другие вопросы по тегам