⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isocurrency.java

📁 pos机交易实现源代码 含金融卡交易8583协议实现 开发环境:linux 典型应用:嵌入系统开发 仅供参考
💻 JAVA
字号:
/*
 * Copyright (c) 2000 jPOS.org.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. The end-user documentation included with the redistribution,
 *    if any, must include the following acknowledgment:
 *    "This product includes software developed by the jPOS project 
 *    (http://www.jpos.org/)". Alternately, this acknowledgment may 
 *    appear in the software itself, if and wherever such third-party 
 *    acknowledgments normally appear.
 *
 * 4. The names "jPOS" and "jPOS.org" must not be used to endorse 
 *    or promote products derived from this software without prior 
 *    written permission. For written permission, please contact 
 *    license@jpos.org.
 *
 * 5. Products derived from this software may not be called "jPOS",
 *    nor may "jPOS" appear in their name, without prior written
 *    permission of the jPOS project.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  
 * IN NO EVENT SHALL THE JPOS PROJECT OR ITS CONTRIBUTORS BE LIABLE FOR 
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
 * POSSIBILITY OF SUCH DAMAGE.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the jPOS Project.  For more
 * information please see <http://www.jpos.org/>.
 */

package org.jpos.iso;

import java.util.*;
import org.jpos.iso.ISOUtil;

/**
 * ISO Currency Conversion package 
 * @author salaman@teknos.com
 * @author Jonathan.O'Connor@xcom.de
 * @version $Id: ISOCurrency.java,v 1.5 2002/05/20 11:23:36 apr Exp $
 */
public class ISOCurrency
{
    private static Hashtable currencies;

    /** Should be called like this: put("ALL", "008", 2);
     * Note: the second parameter is zero padded to three digits
     */
    private static void put(String alphaCode, String isoCode, int numDecimals) {
        Currency ccy = new Currency(alphaCode, Integer.parseInt(isoCode), numDecimals);
        currencies.put(alphaCode, ccy);
        currencies.put(isoCode, ccy);
    }

    static
    {
        currencies=new Hashtable();
        put("AAA", "000", 0);//???
        put("AED", "784", 2);   // UAE Dirham
        put("AFA", "004", 0);   // Afghanistan Afghani
        put("ALL", "008", 2);   // Albanian Lek
        put("AMD", "051", 2);   // Armenian Dram
        put("ANG", "532", 0);   // Dutch Antilles Guilder
        put("AON", "024", 0);   // Angolan New Kwanza
        put("ARS", "032", 2);   // Argentine Peso
        put("ATS", "040", 2);   // Austrian Schilling
        put("AUD", "036", 2);   // Australian Dollar
        put("AWG", "533", 0);   // Aruban Guilder
        put("AZM", "031", 0);   // Azerbaijan Manat
        put("BBD", "052", 2);   // Barbados Dollar
        put("BDT", "050", 2);   // Bangladesh Taka
        put("BEF", "056", 0);   // Belgian Franc
        put("BGL", "100", 2);   // Bulgarian Lev
        put("BHD", "048", 3);   // Bahraini Dinar
        put("BIF", "108", 0);   // Burundi Franc
        put("BMD", "060", 2);   // Bermudan Dollar
        put("BND", "096", 2);   // Brunei Dollar
        put("BOB", "068", 2);   // Bolivian Boliviano
        put("BRL", "986", 2);   // Brazilian Real
        put("BSD", "044", 2);   // Bahamian Dollar
        put("BWP", "072", 2);   // Botswana Pula
        put("BYB", "112", 0);   // Belarussian Ruble
        put("BZD", "084", 2);   // Belize Dollar
        put("CAD", "124", 2);   // Canadian Dollar
        put("CHF", "756", 2);   // Swiss Franc
        put("CLP", "152", 2);   // Chilean Peso
        put("CNY", "156", 2);   // Chinese Yuan Renminbi
        put("COP", "170", 2);   // Columbian Peso
        put("CRC", "188", 2);   // Costa Rican Colon
        put("CSK", "200", 2);// ???
        put("CUP", "192", 2);   // Cuban Peso
        put("CVE", "132", 2);   // Cape Verde Escudo
        put("CYP", "196", 2);   // Cyprus Pound
        put("CZK", "203", 2);   // Czech Koruna
        put("DEM", "280", 2);   // Deutsche Mark
        put("DJF", "262", 0);   // Djibouti Franc
        put("DKK", "208", 2);   // Danish Krone
        put("DOP", "214", 2);   // Dominican Peso
        put("DZD", "012", 0);   // Algerian Dinar
        put("ECS", "218", 2);   // Ecuador Sucre
        put("EEK", "233", 2);   // Estonian Kroon
        put("EGP", "818", 2);   // Egyptian Pound
        put("ESP", "724", 0);   // Spanish Peseta
        put("ETB", "230", 2);   // Ethiopian Birr
        put("EUR", "978", 2);   // Euro
        put("FIM", "246", 2);   // Finnish Markka
        put("FJD", "242", 2);   // Fiji Dollar
        put("FKP", "238", 2);   // Falkland Islands Pound
        put("FRF", "250", 2);   // French Franc
        put("GBP", "826", 2);   // Pound Sterling
        put("GEK", "268", 0);//??? Georgian ???
        put("GHC", "288", 2);   // Ghanian Cedi 
        put("GIP", "292", 2);   // Gibraltar Pound
        put("GMD", "270", 2);   // Gambian Dalasi
        put("GNF", "324", 0);   // Guinean Franc
        put("GQE", "226", 2);//???
        put("GRD", "300", 0);   // Greek Drachma
        put("GTQ", "320", 2);   // Guatemalan Quetzal
        put("GWP", "624", 2);   // Guinea Bissau Peso
        put("GYD", "328", 2);   // Guyana Dollar
        put("HKD", "344", 2);   // Hong Kong Dollar
        put("HNL", "340", 2);   // Honduran Lempira
        put("HRK", "191", 2);   // Croatian Kuna
        put("HTG", "332", 2);   // Haiti Gourde
        put("HUF", "348", 2);   // Hungarian Forint
        put("IDR", "360", 2);   // Indonesian Rupiah
        put("IEP", "372", 2);   // Irish Pound
        put("ILS", "376", 2);   // Israeli Shekel
        put("INR", "356", 2);   // Indian Rupee
        put("IQD", "368", 0);   // Iraqi Dinar
        put("IRA", "365", 2);
        put("IRR", "364", 2);
        put("ISK", "352", 2);
        put("ITL", "380", 0);
        put("JMD", "388", 2);
        put("JOD", "400", 3);
        put("JPY", "392", 0);
        put("KES", "404", 2);
        put("KGS", "417", 2);
        put("KHR", "116", 2);
        put("KMF", "174", 0);
        put("KPW", "408", 2);
        put("KRW", "410", 0);
        put("KWD", "414", 3);
        put("KYD", "136", 2);
        put("KZT", "398", 2);
        put("LAK", "418", 0);
        put("LBP", "422", 2);
        put("LKR", "144", 2);
        put("LRD", "430", 2);
        put("LTL", "440", 2);
        put("LUF", "442", 0);
        put("LVL", "428", 2);
        put("LYD", "434", 3);
        put("MAD", "504", 2);
        put("MDL", "498", 2);
        put("MGF", "450", 0);
        put("MKD", "807", 2);
        put("MMK", "104", 2);
        put("MNT", "496", 2);
        put("MOP", "446", 2);
        put("MRO", "478", 2);
        put("MTL", "470", 3);
        put("MUR", "480", 2);
        put("MVR", "462", 2);
        put("MWK", "454", 2);
        put("MXN", "484", 2);
        put("MYR", "458", 2);
        put("MZM", "508", 2);
        put("NAD", "516", 2);
        put("NGN", "566", 2);
        put("NIO", "558", 2);
        put("NLG", "528", 2);
        put("NOK", "578", 2);
        put("NPR", "524", 2);
        put("NZD", "554", 2);
        put("OMR", "512", 3);
        put("PAB", "590", 2);
        put("PEN", "604", 2);
        put("PGK", "598", 2);
        put("PHP", "608", 2);
        put("PKR", "586", 2);
        put("PLN", "985", 2);
        put("PLZ", "616", 2);//???
        put("PTE", "620", 0);
        put("PYG", "600", 0);
        put("QAR", "634", 2);
        put("ROL", "642", 2);
        put("RWF", "646", 0);
        put("SAR", "682", 2);
        put("SBD", "090", 2);
        put("SCR", "690", 2);
        put("SDA", "737", 2);
        put("SDP", "736", 2);
        put("SEK", "752", 2);
        put("SGD", "702", 2);
        put("SHP", "654", 2);
        put("SIT", "705", 2);
        put("SKK", "703", 2);
        put("SLL", "694", 2);
        put("SOS", "706", 2);
        put("SRG", "740", 2);
        put("STD", "678", 0);
        put("SVC", "222", 2);
        put("SYP", "760", 2);
        put("SZL", "748", 2);
        put("THB", "764", 2);
        put("TMM", "795", 2);
        put("TND", "788", 3);
        put("TOP", "776", 2);
        put("TPE", "626", 0);
        put("TRL", "792", 2);
        put("TTD", "780", 2);
        put("TWD", "901", 2);
        put("TZS", "834", 2);
        put("UAK", "804", 2);//???
        put("UGX", "800", 2);
        put("USD", "840", 2);
        put("UYU", "858", 2);
        put("UZS", "860", 2);
        put("VEB", "862", 2);
        put("VND", "704", 2);
        put("VUV", "548", 0);
        put("WST", "882", 2);
        put("XAF", "950", 0);
        put("XCD", "951", 2);
        put("XEU", "954", 2);
        put("XOF", "952", 0);
        put("XPF", "953", 0);
        put("YDD", "720", 2);//???
        put("YER", "886", 2);
        put("YUN", "890", 0);//???
        put("ZAR", "710", 2);
        put("ZMK", "894", 2);
        put("ZRN", "180", 2);
        put("ZWD", "716", 2);
    }

    /** 
     * Converts from an ISO Amount (12 digit string) to a double taking in 
     * consideration the number of decimal digits according to currency
     * 
     * @param isoamount - The ISO amount to be converted (eg. ISOField 4)
     * @param currency  - The ISO currency to be converted (eg. ISOField 49)
     * @return result - A double representing the converted field
     * @exception IllegalArgumentException
     */
    public static double convertFromIsoMsg(String isoamount, String currency) throws IllegalArgumentException
    {
        double d=0;                                                                                           
        try
        {
            Currency c=(Currency)currencies.get(currency.toUpperCase());
            int decimals=c.getDecimals();
            double m=1; if(decimals>0) for(int x=1;x<=decimals;x++) m*=10;
            d=new Double(isoamount).doubleValue();
            d/=m;
        }
        catch(Exception e)
        {
            throw new IllegalArgumentException("Failed convertFromIsoMsg");
        }
        return d;
    }

    /** 
     * Converts an amount to an ISO Amount taking in consideration
     * the number of decimal digits according to currency
     * 
     * @param amount - The amount to be converted 
     * @param currency  - The ISO currency to be converted (eg. ISOField 49)
     * @return result - An iso amount representing the converted field
     * @exception IllegalArgumentException
     */
    public static String convertToIsoMsg(double amount,String currency) throws IllegalArgumentException
    {
        String z=null;
        try
        {
            Currency c=(Currency)currencies.get(currency.toUpperCase());
            if(c==null) throw new IllegalArgumentException("Bad currency parameter");
            int decimals=c.getDecimals();
            double m=1; if(decimals>0) for(int x=1;x<=decimals;x++) m*=10;
            amount*=m;
            z=ISOUtil.zeropad(Long.toString((long)amount),12);
        }
        catch(Exception e)
        {
            throw new IllegalArgumentException("Failed convertToIsoMsg");
        }
        return z;
    }
    
    public static Object[] decomposeComposedCurrency(String incurr) throws IllegalArgumentException
    {
        Object[] outcurr=null;
        try
        {   
            StringTokenizer st=new StringTokenizer(incurr);
            String curr=st.nextToken();
            Double amount=new Double(st.nextToken());
            outcurr=new Object[2];
            outcurr[0]=curr;
            outcurr[1]=amount;
        }
        catch(Exception e)
        {   
            throw new IllegalArgumentException("Failed decompose");
        }
        return outcurr;
    }
    
    public static String getIsoCodeFromAlphaCode(String alphacode) throws IllegalArgumentException
    {
        String isocode=null;
        try
        {
            Currency c=(Currency)currencies.get(alphacode.toUpperCase());
            isocode=ISOUtil.zeropad(Integer.toString(c.getIsoCode()),3);
            if(isocode==null) throw new IllegalArgumentException("AlphaCode not found, or incorrectly specified");
        }
        catch(Exception e)
        {
            throw new IllegalArgumentException("Failed getIsoCodeFromAlphaCode");
        }
        return  isocode;
    }

    public static Currency getCurrency (int code) throws ISOException {
	return (Currency) 
	    currencies.get (ISOUtil.zeropad (Integer.toString (code), 3));
    }

/*
    static public void main(String[] args)
    {
        try
        {
            String cychamount="uyu 25049.00";
            Object[] d=decomposeComposedCurrency(cychamount);
            String curr=(String)d[0];
            double amount=((Double)d[1]).doubleValue();
            System.out.println("Cych: "
		+cychamount+" , CURR="+curr+" , AMOUNT="+amount);
            String isocurr=getIsoCodeFromAlphaCode(curr);
            String a1=convertToIsoMsg(amount,isocurr);
            double d2=convertFromIsoMsg(a1,isocurr);
            System.out.println("ISOCUrr: "+a1);
            System.out.println(amount+"="+d2);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
*/
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -