De meeste bankkaarten hebben een uniek nummer waarvan de geldigheid kan gecontroleerd worden aan de hand van een algoritme dat ontwikkeld werd door Hans Peter Luhn van IBM. Dit algoritme kan bijna alle fouten opsporen die het resultaat zijn van één verkeerd ingegeven cijfer, de omwisseling van twee opeenvolgende cijfers, en tal van andere fouten. IBM nam in 1954 een patent op het algoritme (U.S. Patent 29500481), maar nu mag het door iedereen vrij gebruikt worden.

Het algoritme van Luhn werkt van rechts naar links, waarbij het cijfer helemaal achteraan een controlecijfer is. Het controlecijfer moet de volgende test doorstaan.

Volgens dit algoritme is het kaartnummer 49927398716 dus geldig. De som wordt immers als volgt berekend \[ 6 + (2) + 7 + (1 + 6) + 9 + (6) + 7 + (4) + 9 + (1 + 8) + 4 = 70 \] en dat resultaat is deelbaar door 10. Hierbij wordt de som van de cijfers na de verdubbeling aangegeven tussen ronde haakjes.

Opgave

Je opdracht bestaat erin om de volgende drie functies te schrijven, waarbij telkens een kaartnummer als string aan de functie moet doorgegeven worden.

Zorg er bij de implementatie van deze functies voor dat je zo optimaal mogelijk hergebruik maakt van je broncode.

Voorbeeld

>>> luhn('49927398716')
70
>>> luhn('49927938716')
67
>>> luhn('79927398716')
73
"""

>>> geldig('49927398716')
True
>>> geldig('49927938716')
False
>>> geldig('79927398716')
False

>>> controle('4992739871')
'49927398716'
>>> controle('4992793871')
'49927938719'
>>> controle('7992739871')
'79927398713'