30kmhcz

Social networking => Nedopravní tématika => Téma založeno: gumidos 02 Října 2017, 08:58:35

Název: Čísla účtů [Was: Vozidlo zaplaceno - nedodáno]
Přispěvatel: gumidos 02 Října 2017, 08:58:35
I v případě, že někdo něco pošle opravdu omylem např. kvůli překlepu v čísle účtu,.......
V podstatě je tahle varianta prakticky vyloučena. Musel by to být skutečně "hodně povedený překlep" aby se to povedlo. Podobně jako konstrukce rodného čísla, je i číslo účtu výsledkem nějaké matematické operace. Viz. např. zde https://www.penize.cz/bezne-ucty/15470-tajemstvi-cisla-uctu. Takže záměna jedné číslice naprosto nehrozí.



Název: Re:Re:Vozidlo zaplaceno - nedodáno
Přispěvatel: hh 02 Října 2017, 10:00:59
V podstatě je tahle varianta prakticky vyloučena. Musel by to být skutečně "hodně povedený překlep" aby se to povedlo. Podobně jako konstrukce rodného čísla, je i číslo účtu výsledkem nějaké matematické operace. Viz. např. zde https://www.penize.cz/bezne-ucty/15470-tajemstvi-cisla-uctu. Takže záměna jedné číslice naprosto nehrozí.
Nebyl vy jste náhodou v Rusku? Ten hodně povedený překlep může být třeba přidaná nula na konec čísla účtu, které nevyužívá všech 10 cifer (nebo naopak vynechaná nula na konci čísla, které nulou končí). Také lze zaměnit kód banky, zapomenout předčíslí (či zadat jiné), nebo např. u jedné banky, která využívá 2ciferná předčíslí, nepochopit význam pomlčky a zadat předčíslí spolu s 8místným číslem účtu dohromady. Toto vše tím testem mod 11 projde.

Je fakt, že použité schéma kontroly integrity odhalí libovolný překlep spočívající v záměně nejvýše jedné číslice v čísle účtu či předčíslí, odhalí i prohození dvou cifer, ale u jiných typů překlepu (např. vynechaná/přidaná číslice, a téměř cokoliv dalšího kromě těch 2 uvedených věcí) máte šanci 1:10, že vytvoříte platné číslo účtu. Pak sice následuje další filtr a to, zda takový účet může v dané bance existovat (odpovídá internímu schématu pro přidělování čísel účtů) a pokud ano, zda opravdu existuje, ale množina případů, kdy se to stane, prázdná není. Z mého okolí vím např. o jednom konkrétním případu, kde se to „povedlo“ právě zapomenutím nuly na konci, a zrovna šlo o docela netriviální částku.

Zdaleka nejčastějším zdrojem omylů v zaslání plateb ale není chyba při přepisu čísla účtu, ale zadání jiného čísla účtu, např. při přepisování nějaké tabulky zadání čísla o řádek výše/níže, nezvládnutá práce s Ctrl-C Ctrl-V atp. Nebo oblíbený špek jedné mé účetní, které se již několikrát povedlo poslat správnou částku na správný účet se správným VS, akorát z blbého účtu (patřícího úplně jinému subjektu).
Název: Re:Re:Vozidlo zaplaceno - nedodáno
Přispěvatel: gumidos 02 Října 2017, 11:04:42
Ten hodně hodně povedený překlep může být třeba přidaná nula na konec čísla účtu, které nevyužívá všech 10 cifer (nebo naopak vynechaná nula na konci čísla, které nulou končí). Také lze zaměnit kód banky, zapomenout předčíslí (či zadat jiné), nebo např. u jedné banky, která využívá 2ciferná předčíslí, nepochopit význam pomlčky a zadat předčíslí spolu s 8místným číslem účtu dohromady. Toto vše tím testem mod 11 projde.
Je fakt, že použité schéma kontroly integrity odhalí libovolný překlep spočívající v záměně nejvýše jedné číslice v čísle účtu či předčíslí, odhalí i prohození dvou cifer, ale u jiných typů překlepu (např. vynechaná/přidaná číslice, a téměř cokoliv dalšího kromě těch 2 uvedených věcí) máte šanci 1:10, že vytvoříte platné číslo účtu. Pak sice následuje další filtr a to, zda takový účet může v dané bance existovat (odpovídá internímu schématu pro přidělování čísel účtů) a pokud ano, zda opravdu existuje, ale množina případů, kdy se to stane, prázdná není. Z mého okolí vím např. o jednom konkrétním případu, kde se to „povedlo“ právě zapomenutím nuly na konci, a zrovna šlo o docela netriviální částku.
Nechci se přít do krve, ale mám pocit, že jakákoliv "0", pokud není uprostřed čísla účtu, je nepodstatná. Takže by vynechaná nebo naopak přidaná nula neměla být problém. Některé firmy pak zadávají např. svoje příkazy ve "svém formátu" - tedy např. vždy doplňují číslo příslušným počtem nul do 10 pozic + předčíslí do 6 pozic. Ten váš případ je fakt zvláštní  - nemělo by k tomu takto jednoduše dojít. Můj kamarád si chtěl zvolit svoje číslo účtu - vzdal to, v podstatě mu to vždy přepsali do varianty, která byla o ničem. Poměrně často je vložen další "kod" příslušné banky, který má riziko chyby minimalizovat. Ale asi je skutečně nenulová pravděpodobnost, že se to může vše "povést".
Název: Re:Čísla účtů [Was: Vozidlo zaplaceno - nedodáno]
Přispěvatel: hh 02 Října 2017, 12:44:51
Diskuse o překlepech v číslech účtů přesunuta do gaychatu vzhledem k nulové relevanci ve vztahu k původnímu dotazu.

Přít se do krve by bylo zhola zbytečné, protože ten případ s nulou je zcela reálný (znám konkrétní data transakcí, čísla všech účtů i jejich vlastníky a částečně jsem se podílel i na následném řešení věci s bankou). Jestli trpíte syndromem nevěřícího Tomáše, tak vás v případě souhlasu aktérů transakce klidně nechám si do té rány sáhnout.

Doplňování 0 není žádný svůj formát. Je to jen jedna z možných reprezentací čísla účtu. To se dle specifikace skládá z předčíslí o max. 6 cifrách a samotného čísla o max. 10 cifrách. Kanonická forma vypadá tak, že se předčíslí i číslo účtu doplní ZLEVA nulami a zapíše ve tvaru NNNNNN-MMMMMMMMMM. Jiná přípustná reprezentace vypadá tak, že se jak z předčíslí, tak z čísla účtu odstraní nuly ZLEVA, tj. např. NN-MMMMMMMM (začínalo-li předčíslí 4 nulami a číslo účtu 2). Neexistující předčíslí (které je dle specifikace nepovinné) se považuje za ekvivalentní předčíslí 000000 a může se vynechat zcela (tj. přípustná reprezentace pak nemá pomlčku, tj. MMMMMMMMMM, opět variantně s možností vynechat nuly zleva). A konečně v případě, že je číslo účtu uvedeno v plné délce (doplněné případně na 10 cifer zleva nulami), je možné vynechat pomlčku, tedy psát např. NNNNNNMMMMMMMMMM (obecně) nebo NN00MMMMMMMM (v případě výše zmíněného předčíslí ve tvaru 0000NN a čísla účtu ve tvaru 00MMMMMMMM). Logicky je ale nutné si vybrat, jestli vynechám pomlčku nebo leading zeroes u čísla účtu, protože NN-MMMMMMMM je něco jiného než NNMMMMMMMM (a navíc zrovna tohle ten test mod 11 neodhalí, protože zrovna tady platí implikace, že projde-li 0000NN-00MMMMMMMM, pak projde i 000000-NNMMMMMMMM).

Tolik k teorii o tom, že jakákoliv nula je nepodstatná. Platí to jen o nule zleva a při dodržení výše uvedeného. Nuly na konci se to nijak netýká. Např. Allianz má pro některé platby sexy číslo účtu 2700/2700 a zcela jistě neprojde, pokud se pokusíte zaplatit na 27/2700 či 27000/2700, byť testem mod 11 projde vše.
Název: Re:Re:Vozidlo zaplaceno - nedodáno
Přispěvatel: 2M 02 Října 2017, 14:55:56
gumidos:
Stejně jako u jiného čísla i v čísle účtu jsou nepodstatné jen nuly vlevo.. třebas 5, 05 a 005 je pořád stejné číslo.. ale 5, 50 a 500 určitě není stejné číslo.
Název: Re:Čísla účtů [Was: Vozidlo zaplaceno - nedodáno]
Přispěvatel: opas 02 Října 2017, 15:15:15
Tak. Třeba účet 7208850/0300 je validní (mod 11) a 720885/0300 také.
Název: Re:Čísla účtů [Was: Vozidlo zaplaceno - nedodáno]
Přispěvatel: hh 02 Října 2017, 15:23:37
opas: Tak jistě, ono to vzhledem ke konstrukci toho součtu platí obecně - je-li MMMMMMMMM validní, tak je validní i MMMMMMMMM0, a naopak. Důkaz - váhy jsou konstruovány jako 2^N mod 11, kde N je pořadí cifry zprava. Přidáním nuly na konec se tak kontrolní součet pouze vynásobí 2 (u každé váhy bereme N+1 místo N) a byl-li původně dělitelný 11, je i poté, plus se přidá 0.

2M: Tady bych trochu zvednul obočí, protože dejme tomu, že 5, 05 i 005 jsou stejná čísla (máme-li to číst jako přirozené číslo bez nějaké bližší specifikace, co těmi zbytečnými nulami chtěl básník říci), ale u 050 bych řekl, že se to rovná nikoliv 50, ale 40. Hádejte proč.
Název: Re:Čísla účtů [Was: Vozidlo zaplaceno - nedodáno]
Přispěvatel: 2M 02 Října 2017, 15:59:50
2M: Tady bych trochu zvednul obočí, protože dejme tomu, že 5, 05 i 005 jsou stejná čísla (máme-li to číst jako přirozené číslo bez nějaké bližší specifikace, co těmi zbytečnými nulami chtěl básník říci), ale u 050 bych řekl, že se to rovná nikoliv 50, ale 40. Hádejte proč.

No.. když se má vyplnit třebas počet něčeho na formuláři a jsou tam tři okýnka a v nich bude 0 5 0.. tak asi všichni to pochopí jako číslo padesát..
A nebo když odometr v autě ukazuje 050000km tak to asi ukazuje najetých padesát tisíc kilometrů.. a je to rozdíl než když bude ukazovat 005000km..
Název: Re:Čísla účtů [Was: Vozidlo zaplaceno - nedodáno]
Přispěvatel: hh 02 Října 2017, 18:20:17
Koukám, že gaychat se nám pěkně rozjíždí.

2M: To závisí na konvenci. Když nebude známá a budu si muset domýšlet, tak vskutku údaj na odometru 050000 bych nepřečetl jako 20480 km, protože po ujetí 10 km a zpozorování cifry 8 bych vyloučil absurdní možnost, že výrobce zvolil pro zobrazení ujetých km oktalovou soustavu. Ovšem v případě, že by pro ty leading zeroes neexistovalo nějaké rozumné vysvětlení (*) tak bych si o inteligenci tvůrce pomyslel své. Čímž tedy zároveň ruším kvíz o vysvětlení, proč 050 = 40, v řadě programovacích jazyků a odvozených prostředích je 0 prefix pro konstantu v oktalové soustavě :)

(*) Pochopit to lze u odometru složeného z mechanických koleček, kde by přidání prázdného políčka vedle nuly jednak kolečko o 10% zvětšilo a taky zkomplikovalo mechaniku. U elektronického displeje je ale zobrazení nul na začátku diletantské.
Název: Re:Čísla účtů [Was: Vozidlo zaplaceno - nedodáno]
Přispěvatel: asmodeus 02 Října 2017, 18:42:50
Modulo 11 má jistou matematickou váhu (kdysi jsem ji dokázal i odprezentovat, přitom jsem tiše doufal, že v publiku není žádný matfyzák), to je vše, víc neumí.
Co znám účetní/platební programy, probíhá kontrola zvlášť na předčíslí a zvlášť na číslo účtu.

Takže v praxi, když se proběhnete prsty po klávesnici, máte poměrně slušnou šanci, že číslo účtu projde kontrolou modulo 11. Pravděpodobnost tohoto prudce narůstá se zvyšující se částkou, se kterou operujete. U těch opravdu vysokých pak v bance, kam peníze pošlete, opravdu tohle číslo účtu existuje, to je ale zase jiná kapitola.
Název: Re:Čísla účtů [Was: Vozidlo zaplaceno - nedodáno]
Přispěvatel: swenak 02 Října 2017, 19:16:57
Nevím proč, ale po přečteni debaty jsem si vzpomněl na digitron a pak na ruské hodiny elektronika:)
Název: Re:Čísla účtů [Was: Vozidlo zaplaceno - nedodáno]
Přispěvatel: gumidos 02 Října 2017, 20:11:15
opas: Tak jistě, ono to vzhledem ke konstrukci toho součtu platí obecně - je-li MMMMMMMMM validní, tak je validní i MMMMMMMMM0, a naopak. Důkaz - váhy jsou konstruovány jako 2^N mod 11, kde N je pořadí cifry zprava. Přidáním nuly na konec se tak kontrolní součet pouze vynásobí 2 (u každé váhy bereme N+1 místo N) a byl-li původně dělitelný 11, je i poté, plus se přidá 0.
Proč se má ten kontrolní součet v případě přidání nuly násobit 2? Pokud je pevně daná posloupnost vah - 1,2,4,8,5,10,9,7,3,6, bráno zprava, pak při změně počtu cifer čísla účtu dojde k odpovídajícími posunu váhy a např. největším činitelem "10" může být vážena nižší cifra čísla účtu. Např.  u 9-ti místného čísla účtu je na 4. pozici cifra 9 a na 5. pozici cifra 0 (váhy pak jsou 90 a 0) . Přidáním 0 máme 10-ti místné číslo účtu ale došlo k "převážení" a odpovídající váhy pro shodné pozice jsou nyní 81 a 0 - tedy v součtu nižší. Pro kontrolní součet nelze dovodit nic - neexistuje-li nějaká zákonitost skladby číslic účtu.
Pohrál jsem s pár vzorci a takto to vyšlo. Mimochodem překlep jedné číslice vždy vygeneruje chybné číslo účtu - musí být doprovázen překlepem nejméně 1 další číslice, případně 2, kvůli děliteli 11.
Název: Re:Čísla účtů [Was: Vozidlo zaplaceno - nedodáno]
Přispěvatel: hh 03 Října 2017, 00:16:31
Proč se má ten kontrolní součet v případě přidání nuly násobit 2?
Mno, sice jsou životní situace, ve kterých dává formální matematické vzdělání instantní výhodu, vcelku vzácné, ale o to nečekanější. Ten dvojnásobek, jak by pozorný čtenář usoudil z „mod 11“, pochopitelně platí při počítání na okruhu Z11 nebo chcete-li, konečném tělese GF(11). Je to vidět i na vašem příkladu, 90 mod 11 = 2, po posunu 81 mod 11 = 4, tedy opravdu dvojnásobek (2 × 2). Pokud nejste s modulární aritmetikou (https://cs.wikipedia.org/wiki/Modul%C3%A1rn%C3%AD_aritmetika) kamarád, pokusím se to vysvětlit na klasické aritmetice.

Ty váhy nejsou zvoleny náhodně, je to vždy zbytek po dělení 11 čísla 2N, kde N je pořadí cifry zprava, počítáno od nuly. Proto to začíná geometrickou posloupností 1, 2, 4, 8, další váha je 5, protože to je 24 = 16 = 11 + 5, dále 25 = 32 = 2 × 11 + 10, následuje 26 = 64 = 5 × 11 + 9 atd.

Teď si dokážeme pomocné lemma: Mějme váhy v0, v1, v2 ... vk a číslo složené z cifer c0, c1, c2 ... ck, dále podmínku validity která říká, že číslo je validní právě tehdy, když kontrolní součet S = c0 v0 + c1 v1 + c2 v2 + ... + ck vk je beze zbytku dělitelný 11. Pak platí, že podmínka validity zůstane nezměněna (validuje ta samá čísla), pokud libovolnou váhu změníme o celočíselný násobek 11.

Důkaz lemmatu je snadný. Pokud váhu i-té cifry změníme o 11 z (z je celé), znamená to, že v součtu S je na i-té pozici původně součin ci vi, po změně je tam ci (vi + 11 z) = ci vi + 11 × z × ci. Protože ostatní členy kontrolního součtu zůstávají beze změny, platí, že nový součet S’ = S + 11 × z × ci. Tedy původní a nový součet se liší o celočíselný násobek 11. Tedy zjevně S’ je dělitelné 11 právě tehdy, když S je dělitelné jedenácti Q.E.D.

Postupnou aplikací právě dokázaného lemmatu můžeme podmínku validity upravit tak, že od „modulo“ vah 1,2,4,8,5,10,9,7,3,6 přejdeme postupně k plnotučným vahám 2N, tedy 1,2,4,8,16,32,64,128,256,512. Díky lemmatu víme, že je jedno, zda budeme validitu ověřovat s původními či novými vahami. Pro nové váhy pak už výše uvedené tvrzení platí v normální aritmetice, tedy posunutí cifer o 1 doleva přidáním nuly na konec znamená zdvojnásobení kontrolního součtu.

Každopádně ať už počítáme v Z11 či klasické aritmetice, je zjevné, že ten posun doleva přidáním nuly validitu nerozbije. Pokud původní kontrolní součet byl dělitelný 11, bude to platit i o dvojnásobku, a naopak, pokud nebyl, nebude dělitelný ani dvojnásobek.

Mimochodem překlep jedné číslice vždy vygeneruje chybné číslo účtu - musí být doprovázen překlepem nejméně 1 další číslice, případně 2, kvůli děliteli 11.
Kdybyste pozorněji četl a méně se hádal, tak byste zjistil, že přesně toto konstatuji už v příspěvku 2017-10-02, 10:00:59 (https://www.30kmh.cz/index.php?topic=5323.msg56463#msg56463) (začátek druhého odstavce). Na rozdíl od schématu používaného např. pro rodná čísla (všechny váhy rovny 1) to pro čísla účtů odhalí i prohození libovolných 2 cifer. Ale jak jsem již napsal, tím to končí, předmětná kontrola nemusí poznat např. přidání či vypuštění jedné cifry, změnu 2 cifer atp., tam to vždy bude loterie s pravděpodobností výhry 1 : 10, že původně validní číslo bude validní i po takové úpravě.
Název: Re:Čísla účtů [Was: Vozidlo zaplaceno - nedodáno]
Přispěvatel: Anorex 03 Října 2017, 07:49:08
Podle mě jasný aspirant na nejsložitější příspěvěk roku 2017...  :D
Název: Re:Čísla účtů [Was: Vozidlo zaplaceno - nedodáno]
Přispěvatel: cyklista 03 Října 2017, 09:06:08
Děkuji hh za slušnou depku.
Název: Re:Čísla účtů [Was: Vozidlo zaplaceno - nedodáno]
Přispěvatel: gumidos 03 Října 2017, 10:22:22
Postupnou aplikací právě dokázaného lemmatu můžeme podmínku validity upravit tak, že od „modulo“ vah 1,2,4,8,5,10,9,7,3,6 přejdeme postupně k plnotučným vahám 2N, tedy 1,2,4,8,16,32,64,128,256,512. Díky lemmatu víme, že je jedno, zda budeme validitu ověřovat s původními či novými vahami. Pro nové váhy pak už výše uvedené tvrzení platí v normální aritmetice, tedy posunutí cifer o 1 doleva přidáním nuly na konec znamená zdvojnásobení kontrolního součtu.
Vezměme tedy náhodné číslo účtu, např. 119603204 a "modulo váhy"  - v tomto případě 9 místného účtu 1,2,4,8,5,10,9,7,3. Kontrolní součet S=187. Po posunutí cifer o 1 doleva přidáním nuly na konce obdržíme číslo účtu 1196032040 a "modulo" váha bude v tomto případě 1,2,4,8,5,10,9,7,3,6. Kontrolní součet činí 165. Kontrolní součet se nezdvojnásobil.
Abychom potvrdili hypotézu, vyzkoušíme ještě jiné náhodné číslo účtu 738690239. Zde obdržíme kontrolní součty 242 a 297 po přidání nuly.

Kdybyste pozorněji četl a méně se hádal, tak byste zjistil, že přesně toto konstatuji už v příspěvku 2017-10-02, 10:00:59 (https://www.30kmh.cz/index.php?topic=5323.msg56463#msg56463) (začátek druhého odstavce).
Ale toto se zde děje zcela běžně... nebuďte zbytečně hnidopich.
Název: Re:Čísla účtů [Was: Vozidlo zaplaceno - nedodáno]
Přispěvatel: hh 03 Října 2017, 10:42:07
Kontrolní součet se nezdvojnásobil.
Zdvojnásobil. Zkuste si ten vysvětlující příspěvek přečíst ještě jednou. Zdvojnásobení platí při počítání na okruhu Z11, tedy při uvažování pouze zbytků po dělení 11 (viz ten wiki odkaz na modulární aritmetiku). Oba ty vaše příklady představovaly validní číslo účtu ve smyslu uvedené kontroly, tedy kontrolní součet byl dělitelný 11 (tedy modulo 11 se rovnal 0), no a zcela v souladu s tvrzením, které nechcete pochopit, se rovnal nule i při posunu doleva, 2 x 0 je taky 0.

A jak jsem psal, pokud si s jinou než normální aritmetikou netykáte, můžete to alternativně zkusit s těmi 2N vahami. Jak bylo dokázáno, kontrola dopadne stejně, ať použijete „modulo váhy“ či váhy 1,2,4,8,16,32,64,128,256,512. S těmi velkými to bude opravdu dvojnásobek (nejen po dělení 11). Vezmu-li váš první příklad:

před přidáním nuly: 1×256 + 1×128 + 9×64 + 6×32 + 0×16 + 3×8 + 2×4 + 0×2 + 4×1 = 1188
po přidání nuly: 1×512 + 1×256 + 9×128 + 6×64 + 0×32 + 3×16 + 2×8 + 0×4 + 4×2 + 0×1 = 2376 = 2×1188

Zcela dle očekávání jsou oba součty dělitelné 11.