Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

A Postai LuhnA Posta-féle Luhn 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.

Info
titleParamé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

Code Block
languagephp
titlePHP - CDV kód ellenőrzése
linenumberstrue
collapsetrue
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++;
        }
		$modulo = $sum % 10;
		return $sum % 10;
}

 

 

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

Példa

Code Block
languagexml
themeConfluence
linenumberstrue
<payerIdentifier>
    <value>123</value>
    <cdv>2</cdv>
</payerIdentifier> $modulo == 0 ? 0 : 10 - ($modulo);
    }
    
    public function getValueLength()
    {
        return strlen($this->value);
    }
}

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

Példa