Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 23 Next »

A Postai Luhn-féle ellenőrző összeggel ellátott érték (HungarianPostLuhnCdvValue) entitás egy értéket és a hozzá tartozó ellenőrző összeget tartalmazza.

AdattagTípusMagyarázatKötelezőMegszorítások

value

int

BefizetőazonosítóIgen *

 

cdv

int

A Befizetőazonosító alapján

Luhn-képlettel számított ellenőrzőszám.

Igen *Meg kell egyeznie a value értékéből számított cdv értékével.
valueWithCdvint

A Befizetőazonosító, majd az utolsó számjegye

a Luhn-képlettel számított ellenőrzőszám.

Igen *

Az utolsó számjegyének meg kell egyeznie az előtte található

számsor Luhn-féle ellenőrzőösszeggel számított ellenőrzőszámmal.

Paraméterek megadása

A value és cdv adattag akkor, és csak akkor hagyható el, ha a valueWithCdv adattag megadásra került. Amennyiben a value és cdv adattag megadásra került, a valueWithCdv adattag kötelezően elhagyandó.

A CDV készítés algoritmusának szöveges leírása 

1. lépés: Minden második számjegyet, a jobb első számjeggyel kezdődően 2-vel szorozzuk meg.

2.lépés: az 1. lépésben kapott eredmény minden egyes számjegyét annak az eredeti számjegynek az
összegéhez kell hozzáadni, amely az 1. lépésben nem volt semmilyen művelet tárgya.

3.lépés: a 2. lépésben kapott eredményt az első "0"-val végződő közvetlenül következő nagyobb számból
le kell vonni.
Ha a 2. lépésben kapott szám végén "0" áll, akkor az ellenőrző számjegy "0".

 

Példa: ellenőrző számjegy nélküli ügyfélazonosító = 9012028684

1. lépés9012028684
műveletjel x x x x x
szorzószám 2 2 2 2 2
           
EREDMÉNY 0 4 4 12 8
           
2. lépés9+0+1+4+0+4+8+1+2+8+8
ÖSSZESEN=45         
3. lépés          
EREDMÉNY50-45=5       

ELLENŐRZŐ SZÁMJEGY: 5

 

forrás: https://www.posta.hu/static/internet/download/PUSZ_16_4_melleklet_20150901.pdf

CDV ellenőrzésének példakódja

PHP - CDV kód ellenőrzése
class LuhnCdvChecker 
{
    private $value;
    private $cdv;
    
    public function __construct($value, $cdv)
    {
        $this->value = $value;
        $this->cdv = $cdv;
    }
    
    public function isCdvCorrect()
    {
        return $this->calculateCdv() == $this->cdv;
    }

    public function calculateCdv()
    {
        $sum = 0;
        $j = 1;
        $valueAsString = (string) $this->value;
        for ($i = $this->getValueLength() - 1; $i > -1; $i--)
        {
            if ($j % 2 != 0)
            {
                $result = $valueAsString[$i] * 2;
            }
            else
            {
                $result = $valueAsString[$i];
            }

            foreach(str_split($result) as $digit)
            {
                $sum += $digit;
            }

            $j++;
        }
        return $sum % 10;
    }
    
    public function getValueLength()
    {
        return strlen($this->value);
    }
}

$checker = new LuhnCdvChecker(9012028684, 5);
echo 'CDV: ' . $checker->calculateCdv() . "\n"; // 5
echo 'Is correct: ' . ($checker->isCdvCorrect() ? 'true' : 'false') . "\n"; // Is correct: true 

Példa

 

 

  • No labels