# Do not edit - generated from Unicode CLDR data
#
# The key is an ISO4217 currency code, and the value is of the form:
#   display name|symbol|decimal digits|not-used-flag
# If a symbol is not supplied, the currency code will be used
# If # of decimal digits is omitted, 2 is used
# If a currency is not generally used, not-used-flag=1
# Trailing empty fields can be omitted

ADP = andorransk peseta||0|1
AED = UAE dirham
AFA = afghani (1927-2002)|||1
AFN = afghani||0
ALL = albansk lek||0
AMD = armensk dram||0
ANG = nederlansk antillegylden
AOA = angolsk kwanza
AOK = angolsk kwanza (1977-1990)|||1
AON = angolsk ny kwanza (1990-2000)|||1
AOR = angolsk kwanza reajustado (1995-1999)|||1
ARA = argentisk austral|||1
ARL = ARL|||1
ARM = ARM|||1
ARP = argentinsk peso (1983-1985)|||1
ARS = argentinsk peso
ATS = austerriksk schilling|||1
AUD = australsk dollar
AWG = arubisk gylden
AZM = aserbaijansk manat|||1
AZN = aserbajdsjansk manat
BAD = bosnisk-hercegovinsk dinar|||1
BAM = bosnisk-hercegovinsk mark (konvertibel)
BBD = barbadisk dollar
BDT = bangladeshisk taka
BEC = belgisk franc (konvertibel)|||1
BEF = belgisk franc|||1
BEL = belgisk franc (finansiell)|||1
BGL = bulgarsk hard lev|||1
BGN = bulgarsk ny lev
BHD = bahrainsk dinar||3
BIF = burundisk franc||0
BMD = bermudisk dollar
BND = bruneisk dollar
BOB = boliviano
BOP = bolivisk peso|||1
BOV = bolivisk mvdol|||1
BRB = brasiliansk cruzeiro novo (1967-1986)|||1
BRC = brasiliansk cruzado|||1
BRE = brasiliansk cruzeiro (1990-1993)|||1
BRL = brasiliansk real
BRN = brasiliansk cruzado novo|||1
BRR = brasiliansk cruzeiro|||1
BRZ = BRZ|||1
BSD = bahamisk dollar
BTN = bhutansk ngultrum
BUK = burmesisk kyat|||1
BWP = botswansk pula
BYB = kviterussisk ny rubel (1994-1999)|||1
BYR = kviterussisk rubel||0
BZD = belizisk dollar
CAD = kanadisk dollar
CDF = kongolesisk franc
CHE = WIR euro|||1
CHF = sveitsisk franc
CHW = WIR franc|||1
CLE = CLE|||1
CLF = chilensk unidades de fomento||0|1
CLP = chilensk peso||0
CNY = kinesisk yuan renminbi|CN¥
COP = colombiansk peso||0
COU = unidad de valor real|||1
CRC = costaricansk colon||0
CSD = gammal serbisk dinar|||1
CSK = tsjekkoslovakisk koruna (hard)|||1
CUC = CUC
CUP = kubansk peso
CVE = kappverdisk escudo
CYP = kypriotisk pund|||1
CZK = tsjekkisk koruna
DDM = austtysk mark|||1
DEM = tysk mark|||1
DJF = djiboutisk franc||0
DKK = dansk krone|Dkr
DOP = dominikansk peso
DZD = algerisk dinar
ECS = ecuadoriansk sucre|||1
ECV = ecuadoriansk unidad de valor constante (UVC)|||1
EEK = estisk kroon|Ekr
EGP = egyptisk pund|EG£
ERN = eritreisk nakfa
ESA = spansk peseta (A-konto)|||1
ESB = spansk peseta (konvertibel konto)|||1
ESP = spansk peseta||0|1
ETB = etiopisk birr
EUR = euro|€
FIM = finsk mark|||1
FJD = fijiansk dollar
FKP = Falkland-pund
FRF = fransk franc|||1
GBP = britisk pund sterling
GEK = georgisk kupon larit|||1
GEL = georgisk lari
GHC = ghanesisk cedi (1979-2007)|||1
GHS = ghanesisk cedi
GIP = gibraltarsk pund
GMD = gambisk dalasi
GNF = guineansk franc||0
GNS = guineansk syli|||1
GQE = ekvatorialguineansk ekwele guineana|||1
GRD = gresk drakme|||1
GTQ = guatemalansk quetzal
GWE = portugisisk guinea escudo|||1
GWP = Guinea-Bissau-peso|||1
GYD = guyansk dollar||0
HKD = Hongkong-dollar|HK$
HNL = honduransk lempira
HRD = kroatisk dinar|||1
HRK = kroatisk kuna
HTG = haitisk gourde
HUF = ungarsk forint||0
IDR = indonesisk rupi||0
IEP = irsk pund|||1
ILP = israelsk pund|||1
ILS = israelsk ny shekel|₪
INR = indisk rupi
IQD = iraksk dinar||0
IRR = iransk rial||0
ISK = islandsk krone|Ikr|0
ITL = italiensk lire|IT₤|0|1
JMD = jamaikansk dollar|J$
JOD = jordansk dinar|JD|3
JPY = japansk yen||0
KES = kenyansk shilling
KGS = kirgisisk som
KHR = kambodsjansk riel
KMF = komorisk franc|CF|0
KPW = nordkoreansk won||0
KRW = sørkoreansk won|₩|0
KWD = kuwaitisk dinar|KD|3
KYD = caymansk dollar|KY$
KZT = kasakhstansk tenge
LAK = laotisk kip|₭|0
LBP = libanesisk pund|LB£|0
LKR = srilankisk rupi|SLRs
LRD = liberisk dollar|L$
LSL = lesothisk loti
LTL = litauisk lita|Lt
LTT = litauisk talona|||1
LUC = luxemburgsk konvertibel franc|||1
LUF = luxemburgsk franc||0|1
LUL = luxemburgsk finansiell franc|||1
LVL = latvisk lat|Ls
LVR = latvisk rubel|||1
LYD = libysk dinar|LD|3
MAD = marokkansk dirham
MAF = marokkansk franc|||1
MDL = moldovsk leu
MGA = madagassisk ariary||0
MGF = madagassisk franc||0|1
MKD = makedonsk denar
MLF = malisk franc|||1
MMK = myanmarsk kyat||0
MNT = mongolsk tugrik|₮|0
MOP = makaosk pataca|MOP$
MRO = mauritansk ouguiya|UM|0
MTL = maltesisk lira|Lm||1
MTP = maltesisk pund|MT£||1
MUR = mauritansk rupi|MURs|0
MVR = maldivisk rufiyaa
MWK = malawisk kwacha
MXN = meksikansk peso|MX$
MXP = meksikansk sølvpeso (1861-1992)|||1
MXV = meksikansk unidad de inversion (UDI)|||1
MYR = malaysisk ringgit|RM
MZE = mosambikisk escudo|||1
MZM = gammal mosambikisk metical|Mt||1
MZN = mosambikisk metical|MTn
NAD = namibisk dollar|N$
NGN = nigeriansk naira|₦
NIC = nicaraguansk cordoba|||1
NIO = nicaraguansk cordoba oro|C$
NLG = nederlandsk gylden|fl||1
NOK = norsk krone|kr
NPR = nepalsk rupi|NPRs
NZD = new zealandsk dollar|NZ$
OMR = omansk rial||3
PAB = panamansk balboa|B/.
PEI = peruansk inti|I/.||1
PEN = peruansk nuevo sol|S/.
PES = peruansk sol|||1
PGK = papuansk kina
PHP = filippinsk peso|Php
PKR = pakistansk rupi|PKRs|0
PLN = polsk zloty|zł
PLZ = polsk zloty (1950-1995)|||1
PTE = portugisisk escudo|Esc||1
PYG = paraguayansk guarani||0
QAR = qatarsk rial|QR
RHD = rhodesisk dollar|RH$||1
ROL = gammal rumensk leu|||1
RON = rumensk leu
RSD = serbisk dinar|din.|0
RUB = russisk rubel
RUR = russisk rubel (1991-1998)|||1
RWF = rwandisk franc||0
SAR = saudiarabisk rial|SR
SBD = salomonsk dollar|SI$
SCR = seychellisk rupi|SRe
SDD = gammal sudanesisk dinar|LSd||1
SDG = sudansk pund
SDP = gammalt sudanesisk pund|||1
SEK = svensk krone|Skr
SGD = singaporsk dollar|S$
SHP = sankthelensk pund|SH£
SIT = slovensk tolar|||1
SKK = slovakisk koruna|Sk||1
SLL = sierraleonsk leone|Le|0
SOS = somalisk shilling|Ssh|0
SRD = surinamsk dollar|SR$
SRG = surinamsk gylden|Sf||1
STD = Sao Tome og Principe-dobra|Db|0
SUR = sovjetisk rubel|||1
SVC = salvadoransk colon|SV₡||1
SYP = syrisk pund|SY£|0
SZL = swazilandsk lilangeni
THB = thailandsk baht|฿
TJR = tadsjikisk rubel|||1
TJS = tadsjikisk somoni
TMM = turkmensk manat||0|1
TND = tunisisk dinar|DT|3
TOP = tongansk paʻanga|T$
TPE = timoresisk escudo|||1
TRL = gammal tyrkiske lire||0|1
TRY = tyrkisk lire|TL
TTD = trinidadisk dollar|TT$
TWD = taiwansk ny dollar|NT$
TZS = tanzaniansk shilling|TSh|0
UAH = ukrainsk hryvnia
UAK = ukrainsk karbovanetz|||1
UGS = ugandisk shilling (1966-1987)|||1
UGX = ugandisk shilling|USh|0
USD = amerikansk dollar
USN = amerikansk dollar (neste dag)|||1
USS = amerikansk dollar (same dag)|||1
UYI = uruguayansk peso en unidades indexadas|||1
UYP = uruguayansk peso (1975-1993)|||1
UYU = uruguayansk peso|$U
UZS = usbekisk sum||0
VEB = venezuelansk bolivar|||1
VEF = venezuelansk bolivar fuerte|Bs.F.
VND = vietnamesisk dong|₫|0
VUV = vanuatuisk vatu|VT|0
WST = vestsamoisk tala|WS$
XAF = CFA franc BEAC|FCFA|0
XAG = sølv|||1
XAU = gull|||1
XBA = europeisk samansett eining|||1
XBB = europeisk monetær eining|||1
XBC = europeisk kontoeining (XBC)|||1
XBD = europeisk kontoeining (XBD)|||1
XCD = austkaribisk dollar|EC$
XDR = spesielle trekkrettar|||1
XEU = europeisk valutaeining|||1
XFO = fransk gullfranc|||1
XFU = fransk UIC-franc|||1
XOF = CFA franc BCEAO|CFA|0
XPD = palladium|||1
XPF = CFP franc|CFPF|0
XPT = platina|||1
XRE = RINET-fond|||1
XTS = testvalutakode|||1
XXX = ukjend eller ugyldig valuta|||1
YDD = jemenittisk dinar|||1
YER = jemenittisk rial|YR|0
YUD = jugoslavisk dinar (hard)|||1
YUM = jugoslavisk noviy-dinar|||1
YUN = jugoslavisk konvertibel dinar|||1
ZAL = sørafrikansk rand (finansiell)|||1
ZAR = sørafrikansk rand|R
ZMK = zambisk kwacha|ZK|0
ZRN = zairisk ny zaire|NZ||1
ZRZ = zairisk zaire|||1
ZWD = zimbabwisk dollar|Z$|0|1
