Bezkontaktní karty snížily používání hotovosti. Češi rychlé platby milují

26. 4. 2018
Doba čtení: 4 minuty

Sdílet

Autor: Depositphotos
Aktualizováno 26. 4. 2018 18:16
Celkový objem utracených peněz přes karty za posledních pět let vzrostl téměř dvojnásobně na 540 miliard korun za rok 2017. Prošli jsme novou statistiku a vybrali to nejzajímavější.

Osm z deseti plateb kartou už v Česku proběhne přes bezkontaktní funkci. Devět z deseti karet pak už umí zaplatit jen přes „pípnutí“. Nadále také klesá průměrná platba kartou, v roce 2017 to bylo 665 korun. Za pět let je to pokles o více jak čtvrtinu. Ukazují to nově zveřejněné statistiky Sdružení pro bankovní karty za rok 2017.

Banky a karetní společnosti, které mají z karetních transakcí poplatky od obchodníků, může těšit, že Češi karty používají stále častěji. Zatímco v roce 2012 Češi u obchodníků uskutečnili zhruba 308 milionů transakcí, loni to bylo 2,6krát tolik – téměř 812 milionů plateb kartou. Celkový objem utracených peněz přes karty za stejnou dobu vzrostl téměř dvojnásobně na 540 miliard korun.

Velký podíl na takto masivním nárůstu mají bezkontaktní platby, které banky v Česku začaly nabízet poprvé v roce 2011. Od té doby se také výrazně zvýšil počet obchodníků, kteří karty přijímají. Sázka na zjednodušení plateb, kdy kartu stačí k terminálu pouze přiložit a při platbě do 500 korun se nemusí zadávat PIN, tak bankám v Česku vyšla. Projděte si podrobné statistiky, které ukazují, jak lidé používají karty, které jim vydaly zdejší finanční instituce. 

Počty a objemy karetních transakcí
Rok 2017 2016 2012
Počet transakcí celkem 811 893 348 683 831 908 308 186 163
Počet bezkontaktních transakcí 637 749 491 492 810 129 není známo
Počet transakcí v zahraničí 74 935 233 52 378 844 21 883 126
Objem transakcí celkem (v miliardách Kč) 540,2 477,8 283,8
Objem bezkontaktních transakcí (v miliardách Kč) 370,4 280,7 není známo
Objem transakcí v zahraničí (v miliardách Kč) 78,5 64,5 35,8

Bezkontaktně v Česku platíme už v drtivé většině případů, konkrétně v 84 procentech případů, kdy nákup hradíme přes kartu. Naopak, když ji použijeme v zahraničí, provedeme tam bez kontaktu jen čtvrtinu plateb. Je to dáno tím, že české obchody jsou vybaveny bezkontaktními terminály podstatně lépe, než jak je běžné ve většině zemí světa.

Podíl bezkontaktních plateb na celkovém počtu plateb kartami
Podíl na celkových transakcích 79 %
Podíl na celkových objemech 69 %
Podíl na celkových domácích transakcích 84 %
Podíl na celkových zahraničních transakcích 25 %
Podíl na celkových domácích objemech 76 %
Podíl na celkových zahraničních objemech 24 %

Počet platebních terminálů v obchodech byl v roce 2017 na 220 tisících, tři čtvrtiny z toho přitom byly s bezkontaktní funkcí. Oproti roku 2014, za kdy má Sdružení pro bankovní karty poprvé k dispozici i statistiku terminálů s bezkontaktní funkcí, se jejich celkový počet více jak zdvojnásobil.

Vývoj počtu obchodníků a platebních terminálů
Rok 2017 2016 2014
Počet obchodníků celkem 75 549 56 859 47 380
Celkový počet terminálů na pokladnách 219 899 159 405 110 308
Počet pokladen, které umějí bezkontaktní platby 161 926 114 928 72 132

Počet vydaných platebních karet v roce 2017 oproti předchozímu roku celkem výrazně klesl. Loni jich bylo 10,7 milionu, oproti 11,3 milionu v roce 2016. Za úbytkem stojí netradičně především debetní karty (tedy karty vydávané k běžným účtům), kterých meziročně ubylo přes 400 tisíc. Jejich počet přitom v předchozích letech narůstal. Na předchozí klesající trend navázaly kreditní karty, kterých je o zhruba 500 tisíc méně než před pěti lety. S bezkontaktní funkcí bylo v roce 2017 už 91 procent ze všech vydaných karet.

Vývoj počtu vydaných karet
Rok 2017 2016 2012
Vydané karty celkem 10 732 949 11 325 153 10 172 883
Debetní karty 8 797 432 9 240 156 7 636 852
Kreditní a charge karty 1 905 590 2 084 997 2 536 028
S bezkontaktní funkcí 9 774 705 9 216 825 není známo

Při podrobnějším pohledu na počet vydaných karet za rok 2017 vidíme, že k úbytku debetních karet došlo u společnosti Mastercard, kde se jejich počet snížil z 5,2 na 4,7 milionu. Důvodem meziročního poklesu je pravidelná aktualizace karetních portfolií bank a jejich ´vyčištění´ o neaktivní karty klientů. Nejde tedy o pokles karetních transakcí nebo objemu či používání karet jako takových, vysvětluje Ivana Laňová, Head of Sales pro Českou republiku a Slovensko.

Celkový počet vydaných karet v roce 2017 podle společností
Karetní společnost Mastercard Visa Diners Club Ostatní
Vydané karty celkem 6 296 662 4 223 935 11 570 200 782
Debetní karty 4 689 956 4 107 476 0 0
Kreditní a charge karty 1 576 881 116 357 11 570 200 782
S bezkontaktní funkcí 5 849 800 3 924 905 0 0

V Česku loni přibylo 358 bankomatů, celkově jich tu bylo 4616. Jejich využívání mírně kleslo, když jsme z nich loni vybrali 678 miliard korun.

Vývoj u bankomatů
Rok 2017 2016 2012
Počet bankomatů 4616 4258 4299
Počet výběrů celkem 165 701 442 178 301 388 172 378 087
Počet výběrů v zahraničí 3 408 976 2 980 937 2 365 337
Celkový objem vybraných peněz 677,8 miliardy Kč 709,8 miliardy Kč 629,5 miliardy Kč
Objem vybraných peněz v zahraničí 16,1 miliardy Kč 14,8 miliardy Kč 10,1 miliardy Kč

Zatímco průměrná výše platby kartou u obchodníků s nástupem bezkontaktních plateb klesá, průměrná výše výběru z bankomatů pozvolně roste.

Školení pro účetní - podzimní novinky

Přehled průměrných výběrů a plateb
Rok 2017 2016 2012
Průměrná výše platby u obchodníka 665 Kč 700 Kč 920 Kč
Průměrná výše bezkontaktní platby 580 Kč 570 Kč ?
Průměrná výše výběru z bankomatu 4090 Kč 3980 Kč 3650 Kč

O cashback, tedy možnost vybrat při nákupu až 1500 korun na pokladně, je ve srovnání s výběry z bankomatů minimální zájem. Loni počet těchto transakcí vystoupal jen těsně nad půl milionu. I proto se chystá zatraktivnění této služby.

Vývoj u cashbacku
Rok 2017 2016 2012
Počet transakcí 502 997 553 315 367 604
Objem vybraných peněz 596,5 milionu Kč 651,4 milionu Kč 467,9 milionu Kč

Rychle roste také používání platebních karet pro nákupy v e-shopech. Oproti roku 2013, ze kdy má Sdružení pro bankovní karty tuto statistiku poprvé k dispozici, došlo k nárůstu transakcí téměř na čtyřnásobek.

Vývoj plateb kartou na webu
Rok 2017 2016 2013
Počet transakcí 64 975 662 39 657 053 16 769 528
Objem transakcí 60,3 miliardy Kč 42,7 miliardy Kč 17,6 miliardy Kč

Autor článku

Autor je redaktorem serveru Peníze.cz.

Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).
'; document.getElementById('outstream-iframe').onload = function () { setupIframe(); } replayScreen = document.getElementById('iinfoOutstreamReplay'); iinfoOutstreamPosition = document.getElementById('iinfoOutstreamPosition'); outstreamContainer = document.getElementsByClassName('outstream-container')[0]; setupReplayScreen(); } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); outstreamDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:-5px;right:25px}"; videoContent = outstreamDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; if ( location.href.indexOf('rejstriky.finance.cz') !== -1 || location.href.indexOf('finance-rejstrik') !== -1 || location.href.indexOf('firmy.euro.cz') !== -1 || location.href.indexOf('euro-rejstrik') !== -1 || location.href.indexOf('/rejstrik/') !== -1 || location.href.indexOf('/rejstrik-firem/') !== -1) { outstreamDirectPlayed = true; soundAllowed = true; iinfoVastUrlIndex = 0; } if (!outstreamDirectPlayed) { console.log('OUTSTREAM direct'); setUpIMA(true); } else { if (soundAllowed) { const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { console.log('OUTSTREAM sound forbidden'); renderBanner(); }); } } else { renderBanner(); } } } function getWrapper() { let articleWrapper = document.querySelector('.rs-outstream-placeholder'); // Outstream Placeholder from RedSys manipulation if (articleWrapper && articleWrapper.style.display !== 'block') { articleWrapper.innerHTML = ""; articleWrapper.style.display = 'block'; } // Don't render OutStream on homepages if (articleWrapper === null) { if (document.querySelector('body.p-index')) { return null; } } if (articleWrapper === null) { articleWrapper = document.getElementById('iinfo-outstream'); } if (articleWrapper === null) { articleWrapper = document.querySelector('.layout-main__content .detail__article p:nth-of-type(6)'); } if (articleWrapper === null) { // Euro, Autobible, Zdravi articleWrapper = document.querySelector('.o-article .o-article__text p:nth-of-type(6)'); } if (articleWrapper === null) { articleWrapper = document.getElementById('sidebar'); } if (!articleWrapper) { console.error("Outstream wrapper of article was not found."); } return articleWrapper; } function setupDimensions() { outstreamWidth = Math.min(iinfoOutstreamPosition.offsetWidth, 480); outstreamHeight = Math.min(iinfoOutstreamPosition.offsetHeight, 320); } /** * Sets up IMA ad display container, ads loader, and makes an ad request. */ function setUpIMA(direct) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); if (direct) { adsRequest.adTagUrl = directVast; console.log('Outstream DIRECT CAMPAING advert: ' + directVast); videoContent.muted = true; videoContent.volume = 0; outstreamDirectPlayed = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; } // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = outstreamWidth; // adsRequest.linearAdSlotHeight = outstreamHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function setupReplayScreen() { replayScreen.addEventListener('click', function () { iinfoOutstreamPosition.remove(); iinfoVastUrlIndex = 0; outstreamInit(); }); } /** * Sets the 'adContainer' div as the IMA ad display container. */ function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. outstreamDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( outstreamDocument.getElementById('adContainer'), videoContent); } function unmuteAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } } /** * Loads the video content and initializes IMA ad playback. */ function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(outstreamWidth, outstreamHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } /** * Handles the ad manager loading and sets ad event listeners. * @param { !google.ima.AdsManagerLoadedEvent } adsManagerLoadedEvent */ function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } /** * Handles actions taken in response to ad events. * @param { !google.ima.AdEvent } adEvent */ function onAdEvent(adEvent) { // Retrieve the ad from the event. Some events (for example, // ALL_ADS_COMPLETED) don't have ad object associated. const ad = adEvent.getAd(); console.log('Outstream event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: // This is the first event sent for an ad - it is possible to // determine whether the ad is a video ad or an overlay. if (!ad.isLinear()) { // Position AdDisplayContainer correctly for overlay. // Use ad.width and ad.height. videoContent.play(); } outstreamDocument.getElementById('adContainer').style.width = '100%'; outstreamDocument.getElementById('adContainer').style.maxWidth = '640px'; outstreamDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); // This event indicates the ad has started - the video player // can adjust the UI, for example display a pause button and // remaining time. if (ad.isLinear()) { // For a linear ad, a timer can be started to poll for // the remaining time. intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstreamLastError === 303) { if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } } break; case google.ima.AdEvent.Type.COMPLETE: // This event indicates the ad has finished - the video player // can perform appropriate UI actions, such as removing the timer for // remaining time detection. if (ad.isLinear()) { clearInterval(intervalTimer); } if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } break; } } /** * Handles ad errors. * @param { !google.ima.AdErrorEvent } adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstreamLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { renderBanner(); } } function renderBanner() { if (isBanner) { console.log('Outstream: Render Banner'); iinfoOutstreamPosition.innerHTML = ""; iinfoOutstreamPosition.style.height = "330px"; iinfoOutstreamPosition.appendChild(bannerDiv); } else { console.log('Outstream: Banner is not set'); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoOutstreamPosition.remove(); outstreamInit(); } else { return false; } adVolume = 1; return true; } /** * Pauses video content and sets up ad UI. */ function onContentPauseRequested() { videoContent.pause(); // This function is where you should setup UI for showing ads (for example, // display ad timer countdown, disable seeking and more.) // setupUIForAds(); } /** * Resumes video content and removes ad UI. */ function onContentResumeRequested() { videoContent.play(); // This function is where you should ensure that your UI is ready // to play content. It is the responsibility of the Publisher to // implement this function when necessary. // setupUIForContent(); } function onActiveView() { if (outstreamContainer) { const containerOffset = outstreamContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstreamPaused) { adsManager.resume(); outstreamPaused = false; } return true; } else { if (!outstreamPaused) { adsManager.pause(); outstreamPaused = true; } } } return false; } let outstreamInitInterval; if (typeof cpexPackage !== "undefined") { outstreamInitInterval = setInterval(tryToInitializeOutstream, 100); } else { const wrapper = getWrapper(); if (wrapper) { let outstreamInitialized = false; window.addEventListener('scroll', () => { if (!outstreamInitialized) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { outstreamInit(); outstreamInitialized = true; } } }); } } function tryToInitializeOutstream() { const wrapper = getWrapper(); if (wrapper) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstreamInitInterval); outstreamInit(); } } } else { clearInterval(outstreamInitInterval); } } }
OSZAR »