本發(fā)明涉及一種出鈔算法,尤其涉及一種用于自動(dòng)柜員機(jī)的多面額出鈔算法。
背景技術(shù):
:目前市面上的自動(dòng)柜員機(jī)大多僅支持100元面額的鈔票出鈔,不支持20元,50元等面額的零鈔取款,該種缺憾對(duì)實(shí)際銀行卡用戶存在一些不便。一方面是,在例如需要取款550元時(shí),在atm機(jī)上必須取款600元,差額則需用戶在使用時(shí)自行找零,帶來(lái)不便;另一方面則是,銀行卡內(nèi)余額不足100元時(shí),無(wú)法取款,對(duì)于一些不再繼續(xù)使用的銀行卡,卡內(nèi)的少量余額因不足100元無(wú)法在atm機(jī)上取款,而去銀行人工取款又過(guò)于麻煩,這種卡內(nèi)的少量余額何去何從變成為銀行卡使用者的一種困擾。為解決上述問(wèn)題,我們需要一種可以任意金額取款支持各個(gè)面額出鈔的出鈔算法。技術(shù)實(shí)現(xiàn)要素:為了解決上述技術(shù)問(wèn)題,本發(fā)明目的在于提供一種多面額出鈔算法。本發(fā)明所述的一種多面額出鈔算法,其特征在于,包括以下步驟:a)、將n個(gè)不同面額的鈔箱編號(hào);b)、根據(jù)面額大小將對(duì)應(yīng)鈔箱排序,面額較大的鈔箱靠前排序,得到序號(hào)1~n~n;c)、依序號(hào)讀取鈔箱對(duì)應(yīng)的當(dāng)前張數(shù)m1~mn~mn,讀取所需取款總額并將取款總額對(duì)初始值a賦值;d)、根據(jù)初始值a對(duì)排序后序號(hào)為n的鈔箱求取款張數(shù)mn’;計(jì)算余額y=a-mn’×對(duì)應(yīng)面額,令余額y對(duì)初始值a賦值,令序號(hào)n+1;e)、重復(fù)步驟d,直至余額y=0時(shí)結(jié)束流程。所述步驟d,取款張數(shù)mn’由初始值a對(duì)序號(hào)n對(duì)應(yīng)的鈔箱面額求商得到:mn’=a/對(duì)應(yīng)面額;當(dāng)商大于當(dāng)前張數(shù)mn時(shí),取款張數(shù)mn’=mn;當(dāng)商不大于當(dāng)前張數(shù)mn時(shí),取款張數(shù)mn’為商。所述步驟d計(jì)算取款張數(shù)時(shí),序號(hào)n由1開(kāi)始計(jì)數(shù)。所述算法在上述基礎(chǔ)上,當(dāng)余額y等于初始值a,并且序號(hào)n達(dá)到最大值n時(shí),將序號(hào)n-1,同時(shí)將取款張數(shù)mn’-1;若此時(shí)取款張數(shù)mn’=0,則序號(hào)n進(jìn)一步-1。其優(yōu)點(diǎn)在于,可以實(shí)現(xiàn)現(xiàn)有各種面額的靈活使用。提高了貨幣周轉(zhuǎn)的效率,柜員機(jī)不再局限于百元面額的服務(wù)。采用了矩陣作為基礎(chǔ)算法,確保出鈔的準(zhǔn)確性。通過(guò)該算法,不管鈔箱內(nèi)存放的各種面額的張數(shù)具體是多少,只要其總額不比所需數(shù)額少,即可實(shí)現(xiàn)取款,靈活度非常高。附圖說(shuō)明圖1是本發(fā)明的算法流程圖。具體實(shí)施方式本發(fā)明所述的一種多面額出鈔算法,其工作流程如圖1所示。先將數(shù)據(jù)初始化,初始化步驟包括將n個(gè)不同面額的鈔箱進(jìn)行編號(hào);包括將初始值a置零。由于在柜員機(jī)使用的過(guò)程中,同一個(gè)鈔箱會(huì)在清空一種面額后,有可能裝入其他面額的鈔票,因此同一個(gè)編號(hào)的鈔箱不能保證其每次都裝有固定面額的鈔票,但可以確保一個(gè)鈔箱內(nèi)存放的面額都是相同。所以在編號(hào)后,需要對(duì)鈔箱進(jìn)行排序。排序依據(jù)其裝有的面額大小為準(zhǔn),較大面額的鈔箱排序靠前,例如目前最大的100元面額鈔箱會(huì)得到1的序號(hào),50元面額鈔箱會(huì)得到2的序號(hào)等,面額越小,鈔箱序號(hào)越大,有n個(gè)不同面額的鈔箱的話,其面額最小的鈔箱得到最大的序號(hào)n。讀取每個(gè)鈔箱對(duì)應(yīng)的當(dāng)前面額張數(shù)mn,例如1號(hào)鈔箱存有x1張鈔票,記為m1=x1;n號(hào)鈔箱存有x2張鈔票,記為mn=x2;n號(hào)鈔箱存有x3張鈔票,記為mn=x3等。獲取用戶需求的取款總金額,并且以該總金額對(duì)初始值a賦值;例如用戶需要取款3456.12元,就將3456.12賦值到a,即,令a=3456.12。根據(jù)初始值a對(duì)排序后序號(hào)為n的鈔箱求出取款張數(shù)mn’。其中對(duì)序號(hào)為1的鈔箱求出的張數(shù)記為m1’,對(duì)序號(hào)為n的鈔箱求出的張數(shù)記為mn’,對(duì)最后一個(gè)序號(hào)n的鈔箱求出的張數(shù)記為mn’。該步驟對(duì)mn’的求值辦法是將初始值a對(duì)序號(hào)n對(duì)應(yīng)的鈔箱面額求商,即mn’=a/對(duì)應(yīng)面額;例如上述的a=3456.12時(shí),求序號(hào)1對(duì)應(yīng)的100元面額張數(shù),m1’=3456.12/100=34;由于張數(shù)只能是整數(shù),所以求出商,并將商向下取整,得到m1’=34張,即取100元面額34張。求出的張數(shù)要跟實(shí)際存儲(chǔ)與該鈔箱的實(shí)際張數(shù)做比較,如果實(shí)際張數(shù)小于求出的張數(shù),則將求出的張數(shù)調(diào)整為實(shí)際的張數(shù),否者求出的張數(shù)以商為準(zhǔn)。計(jì)算出已完成配額張數(shù)后的余額y,余額y=a-mn’×對(duì)應(yīng)面額,例如上述的a=3456.12時(shí),計(jì)算取出34張100元面額后,得到的余額y=3456.12-34*100,得到余額y=56.12。計(jì)算出余額y后將余額y對(duì)初始值a賦值,并另序號(hào)自加一。該步驟目的在于使算法可以對(duì)各種面額依次循環(huán)處理。每次計(jì)算次一級(jí)面額的時(shí)候都以上一次處理完畢的余額y作為初始值,序號(hào)n+1保證了序號(hào)的自動(dòng)對(duì)應(yīng),而且計(jì)算取款張數(shù)時(shí),序號(hào)n由1開(kāi)始計(jì)數(shù)。然后重復(fù)步驟d,直至使余額y為0時(shí),判斷取款成功并結(jié)束流程。用以下實(shí)施例一充分說(shuō)明上述多面額出鈔方案:設(shè)用戶所需取款總額為270元;柜員機(jī)內(nèi)有n=4個(gè)鈔箱,對(duì)每個(gè)鈔箱進(jìn)行編號(hào)得到鈔箱1、鈔箱2、鈔箱3和鈔箱4,各鈔箱情況如下表格:錢(qián)箱1錢(qián)箱2錢(qián)箱3錢(qián)箱4面額201050100張數(shù)100100100100為了盡可能減少配鈔張數(shù),將鈔箱根據(jù)面額從小到大排序得到序號(hào);同時(shí)依次讀取鈔箱對(duì)應(yīng)的當(dāng)前張數(shù)m1~mn~m4:錢(qián)箱4錢(qián)箱3錢(qián)箱1錢(qián)箱2序號(hào)n1234面額100502010張數(shù)mn100100100100讀取所需取款總額并將取款總額對(duì)初始值a賦值,使a=270。由序號(hào)n=1開(kāi)始計(jì)算取款張數(shù)m1’:m1’=270/100=2張。由于計(jì)算出的取款張數(shù)少于當(dāng)前張數(shù),m1’<m1,因此實(shí)際需要取款的100元面額張數(shù)為2。計(jì)算余額y:y=270-2×100=70,令余額y對(duì)初始值a賦值,即a=70,令序號(hào)自加一,即當(dāng)前序號(hào)變?yōu)?+1=2。由于余額y不等于0,重復(fù)上述求張數(shù)步驟。由序號(hào)n=2開(kāi)始計(jì)算取款張數(shù)m2’:m2’=70/50=1張。由于計(jì)算出的取款張數(shù)少于當(dāng)前張數(shù),m2’<m2,因此實(shí)際需要取款的50元面額張數(shù)為1。計(jì)算余額y:y=70-1×50=20,令余額y對(duì)初始值a賦值,即a=20,令序號(hào)自加一,即當(dāng)前序號(hào)變?yōu)?+1=3。由于余額y不等于0,重復(fù)上述求張數(shù)步驟。由序號(hào)n=3開(kāi)始計(jì)算取款張數(shù)m3’:m3’=20/20=1張。由于計(jì)算出的取款張數(shù)少于當(dāng)前張數(shù),m3’<m3,因此實(shí)際需要取款的20元面額張數(shù)為1。計(jì)算余額y:y=20-1×20=0,令余額y對(duì)初始值a賦值,即a=0,令序號(hào)自加一,即當(dāng)前序號(hào)變?yōu)?+1=4。由于余額y等于0,判斷配鈔成功,結(jié)束流程,得到如下配鈔結(jié)果:錢(qián)箱4錢(qián)箱3錢(qián)箱1錢(qián)箱2序號(hào)n1234面額100502010張數(shù)mn100100100100取款張數(shù)mn’211m1’=2,m2’=1,m3’=1;即取款270元得到100元面額2張、50元面額1張和20元面額1張。通過(guò)上述算法,可以實(shí)現(xiàn)自動(dòng)柜員機(jī)多面額出鈔,提高了柜員機(jī)的工作能力。當(dāng)出現(xiàn)某些鈔箱配額不足,或者由于奇偶數(shù)分配失敗等各種原因,而造成配鈔失敗的話,本算法還設(shè)置了自糾正調(diào)節(jié)功能。其工作流程是當(dāng)余額y等于初始值a,并且序號(hào)n達(dá)到最大值n時(shí),將序號(hào)n-1,同時(shí)將取款張數(shù)mn’-1;若此時(shí)取款張數(shù)mn’=0,則序號(hào)n進(jìn)一步-1。通過(guò)以下實(shí)施例二充分說(shuō)明上述自糾正調(diào)節(jié)功能:設(shè)用戶所需取款總額為160元;柜員機(jī)內(nèi)有n=3個(gè)鈔箱,對(duì)每個(gè)鈔箱進(jìn)行編號(hào)得到鈔箱1、鈔箱2和鈔箱3,各鈔箱情況如下表格:錢(qián)箱1錢(qián)箱2錢(qián)箱3面額2050100張數(shù)100100100為了盡可能減少配鈔張數(shù),將鈔箱根據(jù)面額從小到大排序得到序號(hào);同時(shí)依次讀取鈔箱對(duì)應(yīng)的當(dāng)前張數(shù)m1~mn~m3:錢(qián)箱3錢(qián)箱2錢(qián)箱1序號(hào)n123面額1005020張數(shù)mn100100100讀取所需取款總額并將取款總額對(duì)初始值a賦值,使a=160。由序號(hào)n=1開(kāi)始計(jì)算取款張數(shù)m1’:m1’=160/100=1張。由于計(jì)算出的取款張數(shù)少于當(dāng)前張數(shù),m1’<m1,因此實(shí)際需要取款的100元面額張數(shù)為1。計(jì)算余額y:y=160-1×100=60,令余額y對(duì)初始值a賦值,即a=60,令序號(hào)自加一,即當(dāng)前序號(hào)變?yōu)?+1=2。由于余額y不等于0,重復(fù)上述求張數(shù)步驟。由序號(hào)n=2開(kāi)始計(jì)算取款張數(shù)m2’:m2’=60/50=1張。由于計(jì)算出的取款張數(shù)少于當(dāng)前張數(shù),m2’<m2,因此實(shí)際需要取款的50元面額張數(shù)為1。計(jì)算余額y:y=60-1×50=10,令余額y對(duì)初始值a賦值,即a=10,令序號(hào)自加一,即當(dāng)前序號(hào)變?yōu)?+1=3。由于余額y不等于0,重復(fù)上述求張數(shù)步驟。由序號(hào)n=3開(kāi)始計(jì)算取款張數(shù)m3’:m3’=10/20=0張。由于計(jì)算出的取款張數(shù)少于當(dāng)前張數(shù),m3’<m3,因此實(shí)際需要取款的20元面額張數(shù)為0。計(jì)算余額y:y=10-0×20=10,令余額y對(duì)初始值a賦值,即a=10,令序號(hào)自加一;由于n已經(jīng)達(dá)到最大值n=3,而且余額y=初始值a,因此判斷為配鈔失敗,啟動(dòng)自糾正調(diào)整功能:將序號(hào)自減一得到n=2,同時(shí)對(duì)應(yīng)的取款張數(shù)m2’-1。由序號(hào)n=2開(kāi)始計(jì)算取款張數(shù)m2’:m2’-1=60/50-1=0張。由于計(jì)算出的取款張數(shù)少于當(dāng)前張數(shù),m2’<m2,因此實(shí)際需要取款的50元面額張數(shù)為0。計(jì)算余額y:y=60-0×50=60,令余額y對(duì)初始值a賦值,即a=60,令序號(hào)自加一,即當(dāng)前序號(hào)變?yōu)?+1=3。由于余額y不等于0,重復(fù)上述求張數(shù)步驟。由序號(hào)n=3開(kāi)始計(jì)算取款張數(shù)m3’:m3’=60/20=3張。由于計(jì)算出的取款張數(shù)少于當(dāng)前張數(shù),m3’<m3,因此實(shí)際需要取款的20元面額張數(shù)為3。計(jì)算余額y:y=60-3×20=0,令余額y對(duì)初始值a賦值,即a=0,令序號(hào)自加一,n已經(jīng)到達(dá)最大值。由于余額y等于0,判斷配鈔成功,結(jié)束流程,得到如下配鈔結(jié)果:錢(qián)箱錢(qián)箱2錢(qián)箱1序號(hào)n123面額1005020張數(shù)mn100100100取款張數(shù)mn’103m1’=1,m2’=0,m3’=3;即取款160元得到100元面額1張、50元面額0張和20元面額3張。通過(guò)上述帶自糾正調(diào)整功能的出鈔算法,可以進(jìn)一步提高柜員機(jī)的工作能力。對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),可根據(jù)以上描述的技術(shù)方案以及構(gòu)思,做出其它各種相應(yīng)的改變以及變形,而所有的這些改變以及變形都應(yīng)該屬于本發(fā)明權(quán)利要求的保護(hù)范圍之內(nèi)。當(dāng)前第1頁(yè)12