
 1、问题背景: 
在做项目时候遇到一个小小的显示客户部门名称(拼音)的业务,就是在部门名称下有相应的拼音,而在现有的数据库中没有相应字段,并且部门数量比较多,添加起来比较费时,就想能否在js中实现,在页面中处理。 
2、原理描述 
程序原理很简单,网上可以找到汉字拼音的数据字典,但是由于大家都知道GB2312编码里面汉字是按拼音排序的,只要知道各个拼音为首的汉字代码,就可以计算所有汉字的拼音代码了。 
本文通过自定义用于存放汉字拼音与ascii码对应的数据字典,再通过将需要转换的汉字转为ascii码(两位),最后通过查找字典匹配即可,具体实现见代码。 
3、实现代码: 
 代码如下:  
function hash(_key,_value) 
{ 
this.key = _key; /* 拼音*/ 
this.value = _value; /* ascii码*/ 
} 
/* javascript 的自定义对象,用于存放汉字拼音数据字典*/ 
function dictionary() 
{ 
this.items = []; 
this.add = function(_key,_value) 
{ 
this.items[this.items.length] = new hash(_key,_value); 
} 
} 
/*汉字拼音的数据字典-共396个-通过组合声母和韵母*/ 
var d = new dictionary(); 
d.add("a",-20319); 
d.add("ai",-20317); 
d.add("an",-20304); 
d.add("ang",-20295); 
d.add("ao",-20292); 
d.add("ba",-20283); 
d.add("bai",-20265); 
d.add("ban",-20257); 
d.add("bang",-20242); 
d.add("bao",-20230); 
d.add("bei",-20051); 
d.add("ben",-20036); 
d.add("beng",-20032); 
d.add("bi",-20026); 
d.add("bian",-20002); 
d.add("biao",-19990); 
d.add("bie",-19986); 
d.add("bin",-19982); 
d.add("bing",-19976); 
d.add("bo",-19805); 
d.add("bu",-19784); 
d.add("ca",-19775); 
d.add("cai",-19774); 
d.add("can",-19763); 
d.add("cang",-19756); 
d.add("cao",-19751); 
d.add("ce",-19746); 
d.add("ceng",-19741); 
d.add("cha",-19739); 
d.add("chai",-19728); 
d.add("chan",-19725); 
d.add("chang",-19715); 
d.add("chao",-19540); 
d.add("che",-19531); 
d.add("chen",-19525); 
d.add("cheng",-19515); 
d.add("chi",-19500); 
d.add("chong",-19484); 
d.add("chou",-19479); 
d.add("chu",-19467); 
d.add("chuai",-192); 
d.add("chuan",-19288); 
d.add("chuang",-19281); 
d.add("chui",-19275); 
d.add("chun",-19270); 
d.add("chuo",-19263); 
d.add("ci",-19261); 
d.add("cong",-19249); 
d.add("cou",-19243); 
d.add("cu",-19242); 
d.add("cuan",-19238); 
d.add("cui",-19235); 
d.add("cun",-19227); 
d.add("cuo",-19224); 
d.add("da",-19218); 
d.add("dai",-19212); 
d.add("dan",-19038); 
d.add("dang",-19023); 
d.add("dao",-19018); 
d.add("de",-19006); 
d.add("deng",-19003); 
d.add("di",-196); 
d.add("dian",-177); 
d.add("diao",-161); 
d.add("die",-152); 
d.add("ding",-18783); 
d.add("diu",-18774); 
d.add("dong",-18773); 
d.add("dou",-18763); 
d.add("du",-18756); 
d.add("duan",-18741); 
d.add("dui",-18735); 
d.add("dun",-18731); 
d.add("duo",-18722); 
d.add("e",-18710); 
d.add("en",-18697); 
d.add("er",-18696); 
d.add("fa",-18526); 
d.add("fan",-18518); 
d.add("fang",-18501); 
d.add("fei",-18490); 
d.add("fen",-18478); 
d.add("feng",-18463); 
d.add("fo",-18448); 
d.add("fou",-18447); 
d.add("fu",-18446); 
d.add("ga",-18239); 
d.add("gai",-18237); 
d.add("gan",-18231); 
d.add("gang",-18220); 
d.add("gao",-18211); 
d.add("ge",-18201); 
d.add("gei",-18184); 
d.add("gen",-18183); 
d.add("geng",-18181); 
d.add("gong",-18012); 
d.add("gou",-17997); 
d.add("gu",-17988); 
d.add("gua",-17970); 
d.add("guai",-179); 
d.add("guan",-17961); 
d.add("guang",-17950); 
d.add("gui",-17947); 
d.add("gun",-17931); 
d.add("guo",-17928); 
d.add("ha",-17922); 
d.add("hai",-17759); 
d.add("han",-17752); 
d.add("hang",-17733); 
d.add("hao",-17730); 
d.add("he",-17721); 
d.add("hei",-17703); 
d.add("hen",-17701); 
d.add("heng",-17697); 
d.add("hong",-17692); 
d.add("hou",-17683); 
d.add("hu",-17676); 
d.add("hua",-17496); 
d.add("huai",-17487); 
d.add("huan",-17482); 
d.add("huang",-17468); 
d.add("hui",-17454); 
d.add("hun",-17433); 
d.add("huo",-17427); 
d.add("ji",-17417); 
d.add("jia",-17202); 
d.add("jian",-17185); 
d.add("jiang",-16983); 
d.add("jiao",-16970); 
d.add("jie",-16942); 
d.add("jin",-16915); 
d.add("jing",-16733); 
d.add("jiong",-16708); 
d.add("jiu",-16706); 
d.add("ju",-166); 
d.add("juan",-166); 
d.add("jue",-16657); 
d.add("jun",-167); 
d.add("ka",-174); 
d.add("kai",-170); 
d.add("kan",-165); 
d.add("kang",-159); 
d.add("kao",-152); 
d.add("ke",-148); 
d.add("ken",-133); 
d.add("keng",-129); 
d.add("kong",-127); 
d.add("kou",-123); 
d.add("ku",-119); 
d.add("kua",-112); 
d.add("kuai",-107); 
d.add("kuan",-103); 
d.add("kuang",-101); 
d.add("kui",-16393); 
d.add("kun",-16220); 
d.add("kuo",-16216); 
d.add("la",-16212); 
d.add("lai",-16205); 
d.add("lan",-16202); 
d.add("lang",-16187); 
d.add("lao",-16180); 
d.add("le",-16171); 
d.add("lei",-16169); 
d.add("leng",-16158); 
d.add("li",-16155); 
d.add("lia",-15959); 
d.add("lian",-15958); 
d.add("liang",-15944); 
d.add("liao",-15933); 
d.add("lie",-15920); 
d.add("lin",-15915); 
d.add("ling",-15903); 
d.add("liu",-158); 
d.add("long",-15878); 
d.add("lou",-15707); 
d.add("lu",-15701); 
d.add("lv",-15681); 
d.add("luan",-15667); 
d.add("lue",-15661); 
d.add("lun",-15659); 
d.add("luo",-15652); 
d.add("ma",-150); 
d.add("mai",-15631); 
d.add("man",-15625); 
d.add("mang",-15454); 
d.add("mao",-15448); 
d.add("me",-15436); 
d.add("mei",-15435); 
d.add("men",-15419); 
d.add("meng",-15416); 
d.add("mi",-15408); 
d.add("mian",-15394); 
d.add("miao",-15385); 
d.add("mie",-15377); 
d.add("min",-15375); 
d.add("ming",-15369); 
d.add("miu",-15363); 
d.add("mo",-15362); 
d.add("mou",-15183); 
d.add("mu",-15180); 
d.add("na",-15165); 
d.add("nai",-15158); 
d.add("nan",-15153); 
d.add("nang",-15150); 
d.add("nao",-15149); 
d.add("ne",-15144); 
d.add("nei",-15143); 
d.add("nen",-15141); 
d.add("neng",-15140); 
d.add("ni",-15139); 
d.add("nian",-15128); 
d.add("niang",-15121); 
d.add("niao",-15119); 
d.add("nie",-15117); 
d.add("nin",-15110); 
d.add("ning",-15109); 
d.add("niu",-14941); 
d.add("nong",-14937); 
d.add("nu",-14933); 
d.add("nv",-14930); 
d.add("nuan",-14929); 
d.add("nue",-14928); 
d.add("nuo",-14926); 
d.add("o",-14922); 
d.add("ou",-14921); 
d.add("pa",-14914); 
d.add("pai",-14908); 
d.add("pan",-14902); 
d.add("pang",-144); 
d.add("pao",-148); 
d.add("pei",-14882); 
d.add("pen",-14873); 
d.add("peng",-14871); 
d.add("pi",-14857); 
d.add("pian",-14678); 
d.add("piao",-14674); 
d.add("pie",-14670); 
d.add("pin",-14668); 
d.add("ping",-14663); 
d.add("po",-14654); 
d.add("pu",-145); 
d.add("qi",-14630); 
d.add("qia",-14594); 
d.add("qian",-14429); 
d.add("qiang",-14407); 
d.add("qiao",-14399); 
d.add("qie",-14384); 
d.add("qin",-14379); 
d.add("qing",-14368); 
d.add("qiong",-14355); 
d.add("qiu",-14353); 
d.add("qu",-14345); 
d.add("quan",-14170); 
d.add("que",-14159); 
d.add("qun",-14151); 
d.add("ran",-14149); 
d.add("rang",-14145); 
d.add("rao",-14140); 
d.add("re",-14137); 
d.add("ren",-14135); 
d.add("reng",-14125); 
d.add("ri",-14123); 
d.add("rong",-14122); 
d.add("rou",-14112); 
d.add("ru",-14109); 
d.add("ruan",-14099); 
d.add("rui",-14097); 
d.add("run",-14094); 
d.add("ruo",-14092); 
d.add("sa",-14090); 
d.add("sai",-14087); 
d.add("san",-14083); 
d.add("sang",-13917); 
d.add("sao",-13914); 
d.add("se",-13910); 
d.add("sen",-13907); 
d.add("seng",-13906); 
d.add("sha",-13905); 
d.add("shai",-136); 
d.add("shan",-134); 
d.add("shang",-13878); 
d.add("shao",-13870); 
d.add("she",-13859); 
d.add("shen",-13847); 
d.add("sheng",-13831); 
d.add("shi",-13658); 
d.add("shou",-13611); 
d.add("shu",-13601); 
d.add("shua",-13406); 
d.add("shuai",-13404); 
d.add("shuan",-13400); 
d.add("shuang",-13398); 
d.add("shui",-13395); 
d.add("shun",-13391); 
d.add("shuo",-13387); 
d.add("si",-13383); 
d.add("song",-13367); 
d.add("sou",-13359); 
d.add("su",-13356); 
d.add("suan",-13343); 
d.add("sui",-13340); 
d.add("sun",-13329); 
d.add("suo",-13326); 
d.add("ta",-13318); 
d.add("tai",-13147); 
d.add("tan",-13138); 
d.add("tang",-13120); 
d.add("tao",-13107); 
d.add("te",-13096); 
d.add("teng",-13095); 
d.add("ti",-13091); 
d.add("tian",-13076); 
d.add("tiao",-13068); 
d.add("tie",-13063); 
d.add("ting",-13060); 
d.add("tong",-12888); 
d.add("tou",-12875); 
d.add("tu",-12871); 
d.add("tuan",-12860); 
d.add("tui",-12858); 
d.add("tun",-12852); 
d.add("tuo",-12849); 
d.add("wa",-12838); 
d.add("wai",-12831); 
d.add("wan",-12829); 
d.add("wang",-12812); 
d.add("wei",-12802); 
d.add("wen",-12607); 
d.add("weng",-12597); 
d.add("wo",-12594); 
d.add("wu",-12585); 
d.add("xi",-12556); 
d.add("xia",-12359); 
d.add("xian",-12346); 
d.add("xiang",-12320); 
d.add("xiao",-12300); 
d.add("xie",-12120); 
d.add("xin",-12099); 
d.add("xing",-120); 
d.add("xiong",-12074); 
d.add("xiu",-12067); 
d.add("xu",-12058); 
d.add("xuan",-12039); 
d.add("xue",-11867); 
d.add("xun",-11861); 
d.add("ya",-11847); 
d.add("yan",-11831); 
d.add("yang",-11798); 
d.add("yao",-11781); 
d.add("ye",-11604); 
d.add("yi",-115); 
d.add("yin",-11536); 
d.add("ying",-11358); 
d.add("yo",-11340); 
d.add("yong",-11339); 
d.add("you",-11324); 
d.add("yu",-11303); 
d.add("yuan",-11097); 
d.add("yue",-11077); 
d.add("yun",-11067); 
d.add("za",-11055); 
d.add("zai",-11052); 
d.add("zan",-11045); 
d.add("zang",-11041); 
d.add("zao",-11038); 
d.add("ze",-11024); 
d.add("zei",-11020); 
d.add("zen",-11019); 
d.add("zeng",-11018); 
d.add("zha",-11014); 
d.add("zhai",-10838); 
d.add("zhan",-10832); 
d.add("zhang",-10815); 
d.add("zhao",-10800); 
d.add("zhe",-10790); 
d.add("zhen",-10780); 
d.add("zheng",-107); 
d.add("zhi",-10587); 
d.add("zhong",-10544); 
d.add("zhou",-10533); 
d.add("zhu",-10519); 
d.add("zhua",-10331); 
d.add("zhuai",-10329); 
d.add("zhuan",-10328); 
d.add("zhuang",-10322); 
d.add("zhui",-10315); 
d.add("zhun",-10309); 
d.add("zhuo",-10307); 
d.add("zi",-10296); 
d.add("zong",-10281); 
d.add("zou",-10274); 
d.add("zu",-10270); 
d.add("zuan",-10262); 
d.add("zui",-10260); 
d.add("zun",-10256); 
d.add("zuo",-10254); 
/*通过查找字典得到与ascii码对应的拼音*/ 
function getKey(code) 
{ 
if ((code>0)&&(code<160)) 
return String.fromCharCode(code);/* String.fromCharCode 就是把ascii码转成字符*/ 
else if ((code<-20319)||(code>-10247)) 
return ""; 
else 
for (var i=d.items.length-1;i>=0;i--) 
{ 
if (d.items[i].value<=code) 
break; 
} 
return d.items[i].key; 
} 
/*转为大写*/ 
function myConvertToLower(str) 
{ 
var result = "" ; 
for (var i=1;i<=str.length;i++) 
{ 
/*执行指定语言的脚本代码: 
Mid(str,i,1)-指从str的第i个字符开始取长度为1的字符串 
asc(char)-指获取字符的acsii码*/ 
execScript("ascCode=asc(mid(\"" + str + "\"," + i + ",1))", "vbscript"); 
result = result + getKey(ascCode); 
} 
return result.toLowerCase(); 
} 
/*转为大写*/ 
function myConvertToUpper(str) 
{ 
var result = "" ; 
for (var i=1;i<=str.length;i++) 
{ 
/*执行指定语言的脚本代码: 
Mid(str,i,1)-指从str的第i个字符开始取长度为1的字符串 
asc(char)-指获取字符的acsii码*/ 
execScript("ascCode=asc(mid(\"" + str + "\"," + i + ",1))", "vbscript"); 
result = result + getKey(ascCode); 
} 
return result.toUpperCase(); 
} 
 script>  
调用代码: 
 代码如下: 
/*转为大写*/ 
Onblur = "alert(myConvertToUpper(this.value));" 
/*转为小写*/ 
Onblur = "alert(myConvertToLower (this.value));" 
  [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]