>> ROB Bowden: Saluton, mi estas Rob.
Kaj mi esperas ke vi estas ŝarĝita ĉe kredito.
Do unue ni devas fari estas peti la kreditkarto
numeron de la uzanto.
Tie, ni uzas getLongLong.
Vi povus esti uzata ankaŭ getString, sed en tiu kazo, vi bezonus por kontroli
ke ne estis ne-numerajn signoj en la ĉeno.
Do ni uzos getLongLong.
>> Memoru, ke vi ne povas uzi iun kiel getInt, ekde la numero estos
tro granda por havi en entjero.
Iam ni havi tiun numeron, ni vidi tie ĉi dum buklo.
Do tio dum buklo estas efektivigo Luhn algoritmo ke vi
vidi en la pset spec.
>> Kaj ĝi estas reale irante esti iom clever.
Do, en la pset spec, rimarki ke Paŝoj Unu kaj du estas apartaj.
Ni unue iri super la tuta kreditkarto nombro, serĉi ĉiun alian
karaktero ekde la dua por lasta karaktero, kaj multigante ilin
kaj aldonante ĉiuj ciferoj.
Tiam, post tio, ni aldonu en ĉiuj aliaj ciferoj.
>> Do anstataŭ fari tiujn du apartaj paŝoj, ni iras al kombini
ilin en unu iteracio super la tuta kreditkarto nombro.
Tie, ni vidas int nuna cifero egaluloj kreditkarto numeron, mod 10.
Kio estas kreditkarto nombro mod 10 faras?
Ĝi donas al ni la lasta cifero en la tuta nombro.
Do memoru, ke se ni dividis la kalkuli per la 10, tiam la ceteraj
estus ajn tiu lasta cifero estas.
23 dividite per 10, La resto estos 3.
>> Do la lasta cifero, nun tie ĉi, ni vidas ni branĉantaj je mult per 2.
Do kion ni tuj uzos mult per 2 cxar estas diferencante inter
unu el la "cxiu alia numerojn de la dua cifero "nombroj.
Mult per 2 estas tuj ekestas kiel falsa, ekde la lasta cifero devus ne
esti konsiderata de la dua ĝis lasta cifero.
>> Tial do, je la fino de ĉi por buklo, ni vidas, ke ni tuj ŝanĝos ĉi
el falsa al iu.
En la sekva ripeto de la buklo, ĝi tuj konsideris vera ĝis
Fine, kiam ni ŝanĝas ĝin el vera al malvera.
Ĉar tiam ni estos je la tria al lasta cifero, kiu ne estas unu el la
ciferoj, ke ni devus multipliki per 2.
>> Do, se ni hazarde estas en unu el tiuj, ciferoj kiujn ni deziras al multipliki per 2,
ni vidas ni aldonas al nia checksum.
Kaj tie, ni uzas la triargumenta operatoro al fojo
denove estu iom clever.
Do se nuna cifero estas malpli ol 5, tiam Ni povas nur fari nuna cifero fojojn 2.
Tio estas simpla.
Se ĝi estas 1, ĉar ni volas aldoni 2.
Se ĝi estas 2, ni volas aldoni 4.
Se temas pri 4, ni volas aldoni 8.
>> Do kio estas speciala pri 5?
Nu, 5 fojoj 2 estas 10.
Kaj memoru, el la pset spec ke Ni volas aldoni al la ciferoj de la
numeron fojojn 2, kaj ne la numeron fojojn 2 mem.
Do, se la originala nombro estas 7, 7 fojoj 2 estas 14.
Ni volas aldoni 1 plus 4 al la nombro, ne 14.
>> Do ĉi tie, se la nombro estas 5 aŭ pli granda, kion ni faras estas nuna cifero
fojoj 2 minus 9.
Kaj se vi pensas pri tio, 5 fojoj 2 estas 10.
Kaj tial ni aldonante 1, kiu estas 10 minus 9.
Kaj 6 tempojn 2 estas 12.
Do ni aldonante 3, kiu estas 12 minus 9.
Kaj kiu funkcias por ĉiuj nombroj.
>> Do, tio estas kion ni aldono al nia checksum.
Kaj tiu alia estas kio uzado Ŝtupo Du el Luhn algoritmo, kiu estas nur
aldono de la cifero se ĝi ne okazas esti unu el la ĉiuj aliaj ciferoj.
Do iam ni havas tion, tiu gardas spuro de la unuaj du signoj de
la kreditkarto numero, la unuaj du ciferoj, ĉar ni eventuale irante
voli uzi tiun ĉi tie kontroli, Enorde, vizon devas starti
kun ĉi tio, kaj American Express bezonoj komenci per tio, kaj tiel plu.
>> Fine, ni faru kreditkarto nombro egalas kreditkarto
nombro dividata per 10.
Kial ni faras tion?
Nu, ni nur manipulas la lasta cifero.
Dividante per 10 ŝanĝos La tuta nombro super.
Do nun, kiam ni buklo reen, ni estas tuj estos la uzado de la
dua ĝis lasta cifero.
Tiam, kiam ni trafis ĉi denove, ni iras tranĉi la duan daŭri
cifero, buklo dorso, kaj manipuli la tria daŭri cifera, kaj tiel plu, ĝis la
nombro atingas 0, je kiu punkto ni rompi la buklo dum.
>> Ni ankaŭ konservanta trako de la kredito karto nombro longeco, ĉar tio
grave distingi, ĉu tio estas valida kreditkarto nombro.
Do nun, unu fojon ni kalkulis la checksum, ni povas difini ĉu ĝi
estas valida karto.
La checksum mod 10 estas parto de Luhn algoritmo.
Se checksum mod 10 redonas ion ne-nulo, tiam ĉi tiu estos reveni vera,
en kies kazo, la nombro Devas esti nevalidaj.
>> Alie, se checksum mod 10 estas 0, tiam ni povas daŭrigi.
Tiu granda alie se oni diras, se la unua du ciferoj estas egala al Amex 1,
kie ĝis ĉi tie, oni vidas ke Amex 1, kiel por la specifon, estas 34.
Kaj ni vidos ankaŭ kompari ĝin al Amex 2, kiu estas 37.
Kaj la kreditkarto nombro longo estas egalas al la atendata American Express
karto longo, tiam ni povas presi American Express.
>> Ni faros similan aferon per Visa.
La unuaj du ciferoj devas esti pli granda ol aŭ egala al 40 aux malpli
ol aŭ egala al 49.
Tiuj reprezentas validan Vizo kartoj.
Kaj la longo devas esti egala al Vizo Daŭro 1 aŭ Vizo Daŭro 2.
Kaj do la longo devas esti ĉu 13 aŭ 16 ciferoj longa.
>> Kaj fine per MasterCard, ĝi estas simila al Visa, ke la unuaj du
ciferoj devas esti en certa atingo, kaj la longo devas
esti ekzakte 16 ciferoj.
Do, se iu el tiuj kazoj teni, poste en la unua kazo, ni devos presi Amex.
Se tiu kazo validas, ni devos presi Vizo.
Se tiu kazo validas, ni presi MasterCard.
>> Sed se neniu el tiuj, tenu, gxis se la checksum estis valida,
ni ankoraŭ printi nevalidaj.
Ĉar ĝi ne estas unu el tiujn tipojn de kartoj.
Mia nomo estas Rob, kaj mi esperas ke vi trovis kredito interesa.