白话许霆案/肖佑良(2)
许霆取款时,使用自己的卡,密码正确,进入了操作界面,意味着银行电子代理人已经识别出取款人是许霆,从而使许霆可以选择取款按钮。从密码相符时起,电子代理人与许霆就是身份公开的交易对象,双方没有秘密可言。取款和存款都是交易,银行都是这么定义的,原因是存款、取款要求即时给付,存款要将钱交给银行,银行立即增加客户的债权;取款要将钱交给客户,银行立即减少客户的债权,与一手交钱,一手交货完全类似,定义为交易是恰当的。
在ATM机键盘上按动数字键1000时,电脑能够识别为一个数字字符“1”和三个数字字符“0”组成的字符串“1000”或者“1,000”,这种字符串“1000”或者“1,000”,在银行术语上称之为金额字符串。金额字符串与整数1000的性质,在电脑中是完全不同的,需要将字符串转换成为整数才能够进行使用。将字符串转换为整数,需要使用函数命令来执行。整数的表示可带千分符,也可不带千分符,例如:整数1000或者1,000,字符串亦是一样的,例如:字符串“1,000”或者“1000”。将这两种格式的字符串转换成整数1000时,需要使用不同的函数命令,才能转换成整数1000。许霆取款使用的ATM机升级前是采用的是“1000”格式,升级后采用了“1,000”格式。格式的变化,要求程序员对操作系统进行调整,把原来转换字符串“1000”的命令,都要修改成为转换字符串“1,000”的命令。在升级操作时程序员疏忽大意,本来应该修改前后二处的,只修改了一处,留有一处没有修改。没有修改的仍然是原来格式的字符串转换命令,该命令遇到非数字字符具有自动截断的特性。当该命令转换新格式的字符串“1,000”或者“2,000”时,在字符串中遇到非数字的千分符而自动截断后面的字符,结果字符串被转换成整数1或2,而不是计划中的整数1000或者2000。
ATM机上取款,必须要求是100的整数倍,所以当许霆输入取款金额字符串后,ATM机必须对输入的取款金额是否符合要求进行判断。操作系统将要第一次把输入的金额字符串“1,000”转换成整数1000,再除以100计算得出商值,然后比较商值是否是整数,如果不是,ATM机要求重新输入,如果是,ATM机将把商值暂时保存,作为后面ATM机付款时支付百元钞票的张数。这里操作系统是进行第一次转换,这次转换没有出现错误,金额字符串“1,000”被转换成整数1000。
当输入的取款数符合取款要求,ATM机操作系统接下来要把许霆的账户资料和取款请求数一并发送给银行服务器,操作系统需要再次将许霆输入的金额字符串“1,000”转换成整数1000。这里程序员出现疏忽,没有把原格式对应的命令调整为新格式对应的命令,而原格式的转换命令遇到非数字字符“,”就产生截断,结果是“1,000”转换成了整数1,“2,000”转换成了整数2,许霆本来是请求取款1000元或者2000元,发送给服务器变成了请求取款1元或者2元。银行服务器收到ATM机发送来的数据后,立即从数据库中调出许霆账户资料,其中就有存款的余额数。因许霆存款余额为176.97元,当第一次请求取款1000元后,传送数据时出现差错变成了取款1元,取款1元的请求小于存款余额,满足银行设定的取款条件,服务器进行判断后同意取款1元,从账户余额中扣除1元,将新的余额175.97元存入数据库中,同时银行服务器将取款办理的结果返回给ATM机,即同意许霆取款。返回给ATM机的数据中,核心是启动ATM机付款开关的数字信息。用数字信息打开ATM机付款开关启动电动机进行工作,就是机电一体化技术的应用。唯有银行服务器才能够发出数字信息启动ATM机的付款开关,ATM机的付款开关实际掌握在银行服务器手中。ATM机付款模块被启动后开始点钞,ATM机具体要付给许霆的金额是由先前计算出来的商值决定的,许霆第一次请求取款的金额是1000元,除以100商值为10,意味着ATM机要支付10张百元面额的人民币,所以银行服务器同意取款1元之后,启动了ATM机的付款模块,实际付款时交给许霆的钱为1000元,而不是已经扣账的1元。
总共4页
[1] 2
[3] [4] 上一页 下一页