>> ROB BOWDEN: Hej, jeg er Rob.
Og jeg håber, du debiteres op om kredit.
Så første ting, vi skal gøre er anmode kreditkort
nummer fra brugeren.
Her bruger vi getLongLong.
Du kunne også have brugt getString, men i dette tilfælde, ville du nødt til at tjekke
at der ikke var nogen ikke-numerisk tegn i strengen.
Så vi vil bruge getLongLong.
>> Husk, at du ikke kan bruge noget som getInt vil da antallet være
for stor til at passe ind i et heltal.
Når vi har dette nummer, vi se her i while-løkke.
Så denne while-løkke er ved at gennemføre Luhn algoritme, som du
se i PSET spec.
>> Og det er faktisk går at være en smule klog.
Så i PSET spec, bemærke, at Trin et og to er adskilt.
Vi først gå hele kreditkort nummer, på udkig efter alle andre
tegn startende fra den anden til sidste tegn, og multiplicere dem
og tilføje alle de cifre.
Så efter det, vi tilføjer i alle de øvrige cifre.
>> Så i stedet for at gøre dem i to separate trin, vi kommer til at kombinere
dem i én iteration over Hele kreditkortnummer.
Her ser vi int cur cifrede ligemænd kreditkortnummer, mod 10.
Hvad er kreditkortnummer mod 10 gør?
Det giver os det sidste ciffer i hele tal.
Så husk, at hvis vi delte nummer op ved 10, så den resterende
ville være, hvad det sidste ciffer er.
23 divideret med 10, den Resten vil være 3.
>> Så det sidste ciffer, nu her, ser vi vi forgrening på mult med 2..
Så det vi skal bruge mult med 2 for der at skelne mellem
en af ​​de "alle andre numre fra Det andet ciffer "numre.
Mult med 2 kommer til at starte ud som falsk, da det sidste ciffer bør ikke
overvejes fra næstsidste ciffer.
>> Så i slutningen af ​​denne for-løkke, vi se, at vi kommer til at ændre dette
fra false til true.
På den næste iteration af for-løkken, det kommer til at betragtes som sandt indtil
slutningen, når vi ændrer det fra sand til falsk.
Fordi så vil vi være på den tredje til sidste ciffer, som ikke er en af ​​de
cifre, som vi skal ganges med 2.
>> Så hvis vi tilfældigvis at være på en af ​​dem cifre, som vi ønsker at gange med 2,
vi ser vi tilføjer til vores checksum.
Og her er vi ved hjælp af ternære operatør til en gang
igen være lidt smart.
Så hvis nuværende ciffer er mindre end 5, så vi kan bare gøre cur ciffer gange 2.
Det er simpelt.
Hvis det er 1, så vi ønsker at tilføje 2.
Hvis det er 2, ønsker vi at tilføje 4.
Hvis det er 4, ønsker vi at tilføje 8.
>> Så hvad er det særlige ved 5?
Nå, 5 gange 2 er 10..
Og husker fra PSET spec som vi ønsker at tilføje cifrene i
antal gange 2, og ikke antal gange 2 selv.
Så hvis det oprindelige antal er 7, 7 gange 2 er 14..
Vi ønsker at tilføje 1 plus 4 til nummeret ikke 14.
>> Så her, hvis antallet er 5 eller derover, hvad vi laver er cur ciffer
gange 2 minus 9.
Og hvis du tænker over det, 5 gange 2 er 10..
Og så vi tilføjer 1, hvilket er 10 minus 9.
Og 6 gange 2 er 12..
Så vi tilføjer 3, som er 12 minus 9.
Og det virker for alle numre.
>> Så det er hvad vi tilføjer til vores checksum.
Og det andet er, hvad der håndterer Step To af Luhn algoritme, som er lige
tilsætning af ciffer, hvis det ikke sker at være en af ​​de alle andre cifre.
Så når vi har det, det er at holde styr på de to første tegn i
kreditkortnummer, de to første cifre, da vi i sidste ende er på vej hen
ønsker at bruge det herned for at kontrollere, okay, et Visa har til at starte
med dette og et American Express behov at starte med denne, og så videre.
>> Endelig gør vi kreditkort tal svarer kreditkort
antal divideret med 10.
Hvorfor gør vi det?
Nå, vi håndteret bare det sidste ciffer.
Dividere med 10 vil skifte hele nummeret over.
Så nu når vi loop tilbage, er vi kommer til at håndtere
næstsidste ciffer.
Så når vi ramt dette igen, vil vi at afskære næstsidst
ciffer, loopback og håndtere den tredje at vare ciffer, og så videre, indtil
nummer når 0, på hvilket tidspunkt vi bryde ud af while-løkken.
>> Vi er også at holde styr på kredit kortnummer længde, da det er
vigtigt at skelne, om det er et gyldigt kreditkortnummer.
Så nu, når vi har beregnet det checksum, kan vi afgøre, om det
er et gyldigt kort.
Checksum mod 10 er en del af Luhn algoritme.
Hvis checksum mod 10 returnerer noget ikke-nul, så vil returnere sandt,
i hvilket tilfælde antallet må være ugyldig.
>> Ellers, hvis checksum mod 10 er 0, så kan vi fortsætte.
Denne store ellers hvis siger, hvis den første to cifre er lig med AMEX 1,
hvor op her ser vi, at AMEX 1, som pr spec, er 34.
Og vi vil også sammenligne det til AMEX 2, som er 37..
Og kreditkortnummeret længde er svarer til den forventede American Express
kort længde, så vi kan udskrive American Express.
>> Vi vil gøre en lignende ting med Visa.
De første to cifre er nødt til at være større end eller lig med 40 eller mindre
end eller lig med 49.
De repræsenterer gyldige Visa-kort.
Og længden skal være lig med Visa Længde 1 eller Visa Længde 2.
Og så længde skal være enten 13 eller 16 cifre.
>> Og endelig med MasterCard, det er ligner Visa, at de to første
cifre skal være i en bestemt rækkevidde, og mosten længde
være nøjagtig 16 cifre.
Så hvis nogen af ​​disse sager holder, så i det første tilfælde, vil vi udskrive AMEX.
Hvis sagen holder, vil vi udskrive Visa.
Hvis sagen holder, vi får udskrive MasterCard.
>> Men hvis ingen af ​​disse hold, selv hvis kontrolsummen var gyldig,
vi stadig udskrive ugyldigt.
Fordi det ikke er en af de typer af kort.
Mit navn er Rob, og jeg håber du fundet kredit interessant.