tinguo002

 

JAVA身份证验证

public class IDCard {

      private String _codeError;

      //wi =2(n-1)(mod 11)
      final int[] wi = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1};
      // verify digit
      final int[] vi = {1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2};
      private int[] ai = new int[18];
      private static String[] _areaCode={"11","12","13","14","15","21","22"
          ,"23","31","32","33","34","35","36","37","41","42","43","44"
          ,"45","46","50","51","52","53","54","61","62","63","64","65","71","81","82","91"};
      private static HashMap<String,Integer> dateMap;
      private static HashMap<String,String> areaCodeMap;
      static{
            dateMap=new HashMap<String,Integer>();
            dateMap.put("01",31);
            dateMap.put("02",null);
            dateMap.put("03",31);
            dateMap.put("04",30);
            dateMap.put("05",31);
            dateMap.put("06",30);
            dateMap.put("07",31);
            dateMap.put("08",31);
            dateMap.put("09",30);
            dateMap.put("10",31);
            dateMap.put("11",30);
            dateMap.put("12",31);
            areaCodeMap=new HashMap<String,String>();
            for(String code:_areaCode){
                  areaCodeMap.put(code,null);
            }
      }

      //验证身份证位数,15位和18位身份证
      public boolean verifyLength(String code){
            int length=code.length();
            if(length==15 || length==18){
                  return true;
            }else{
                  _codeError="错误:输入的身份证号不是15位和18位的";
                  return false;
            }
      }

      //判断地区码
      public boolean verifyAreaCode(String code){
            String areaCode=code.substring(0,2);
//            Element child=  _areaCodeElement.getChild("_"+areaCode);
            if(areaCodeMap.containsKey(areaCode)){
                  return true;
            }else{
                  _codeError="错误:输入的身份证号的地区码(1-2位)["+areaCode+"]不符合中国行政区划分代码规定(GB/T2260-1999)";
                  return false;
            }
      }

      //判断月份和日期
      public boolean verifyBirthdayCode(String code){
            //验证月份
            String month=code.substring(10,12);
            boolean isEighteenCode=(18==code.length());
            if(!dateMap.containsKey(month)){
                  _codeError="错误:输入的身份证号"+(isEighteenCode?"(11-12位)":"(9-10位)")+"不存在["+month+"]月份,不符合要求(GB/T7408)";
                  return false;
            }
            //验证日期
            String dayCode=code.substring(12,14);
            Integer day=dateMap.get(month);
            String yearCode=code.substring(6,10);
            Integer year=Integer.valueOf(yearCode);

            //非2月的情况
            if(day!=null){
                  if(Integer.valueOf(dayCode)>day || Integer.valueOf(dayCode)<1){
                        _codeError="错误:输入的身份证号"+(isEighteenCode?"(13-14位)":"(11-13位)")+"["+dayCode+"]号不符合小月1-30天大月1-31天的规定(GB/T7408)";
                        return false;
                  }
            }
            //2月的情况
            else{
                  //闰月的情况
                  if((year%4==0&&year%100!=0)||(year%400==0)){
                        if(Integer.valueOf(dayCode)>29 || Integer.valueOf(dayCode)<1){
                              _codeError="错误:输入的身份证号"+(isEighteenCode?"(13-14位)":"(11-13位)")+"["+dayCode+"]号在"+year+"闰年的情况下未符合1-29号的规定(GB/T7408)";
                              return false;
                        }
                  }
                  //非闰月的情况
                  else{
                        if (Integer.valueOf(dayCode) > 28 || Integer.valueOf(dayCode) < 1) {
                              _codeError="错误:输入的身份证号"+(isEighteenCode?"(13-14位)":"(11-13位)")+"["+dayCode+"]号在"+year+"平年的情况下未符合1-28号的规定(GB/T7408)";
                              return false;
                        }
                  }
            }
            return true;
      }

      //验证身份除了最后位其他的是否包含字母
      public boolean containsAllNumber(String code) {
            String str="";
            if(code.length()==15){
                  str=code.substring(0,15);
            }else if(code.length()==18){
                  str=code.substring(0,17);
            }
            char[] ch = str.toCharArray();
            for (int i = 0; i < ch.length; i++) {
                  if (! (ch[i] >= '0' && ch[i] <= '9')) {
                        _codeError="错误:输入的身份证号第"+(i+1)+"位包含字母";
                        return false;
                  }
            }
            return true;
      }

      public String getCodeError(){
            return _codeError;
      }

      //验证身份证
      public boolean verify(String idcard) {
            _codeError="";
            //验证身份证位数,15位和18位身份证
            if(!verifyLength(idcard)){
                return false;
            }
            //验证身份除了最后位其他的是否包含字母
            if(!containsAllNumber(idcard)){
                  return false;
            }

            //如果是15位的就转成18位的身份证
            String eifhteencard="";
            if (idcard.length() == 15) {
                  eifhteencard = uptoeighteen(idcard);
            }else{
                  eifhteencard=idcard;
            }
            //验证身份证的地区码
            if(!verifyAreaCode(eifhteencard)){
                  return false;
            }
            //判断月份和日期
            if(!verifyBirthdayCode(eifhteencard)){
                  return false;
            }
            //验证18位校验码,校验码采用ISO 7064:1983,MOD 11-2 校验码系统
            if(!verifyMOD(eifhteencard)){
                  return false;
            }
            return true;
      }

      //验证18位校验码,校验码采用ISO 7064:1983,MOD 11-2 校验码系统
      public boolean verifyMOD(String code){
            String verify = code.substring(17, 18);
            if("x".equals(verify)){
                  code=code.replaceAll("x","X");
                  verify="X";
            }
            String verifyIndex=getVerify(code);
            if (verify.equals(verifyIndex)) {
                  return true;
            }
//            int x=17;
//            if(code.length()==15){
//                  x=14;
//            }
            _codeError="错误:输入的身份证号最末尾的数字验证码错误";
            return false;
      }

      //获得校验位
      public String getVerify(String eightcardid) {
            int remaining = 0;

            if (eightcardid.length() == 18) {
                  eightcardid = eightcardid.substring(0, 17);
            }

            if (eightcardid.length() == 17) {
                  int sum = 0;
                  for (int i = 0; i < 17; i++) {
                        String k = eightcardid.substring(i, i + 1);
                        ai[i] = Integer.parseInt(k);
                  }

                  for (int i = 0; i < 17; i++) {
                        sum = sum + wi[i] * ai[i];
                  }
                  remaining = sum % 11;
            }

            return remaining == 2 ? "X" : String.valueOf(vi[remaining]);
      }

      //15位转18位身份证
      public String uptoeighteen(String fifteencardid) {
            String eightcardid = fifteencardid.substring(0, 6);
            eightcardid = eightcardid + "19";
            eightcardid = eightcardid + fifteencardid.substring(6, 15);
            eightcardid = eightcardid + getVerify(eightcardid);
            return eightcardid;
      }



调 用 new IDCard().verify(身份证id);
转载:http://www.oschina.net/code/snippet_249203_24013

posted @ 2014-02-27 10:45 一堣而安 阅读(470) | 评论 (0)编辑 收藏

java获取路径

String catalinaHome = new File("").getAbsolutePath();


getAbsolutePath() 得到绝对路径、全路径。
getpath 得到缩写的路径,根据当前目录位置可以缩写路径。得到相对路径
getCanonicalPath() 得到标准路径,将统一平台间的路径写法差异。
package util;

import java.io.File;

public class CurrentDirectory {
    
    
public static void print(Object o) {
        System.out.println(o);
    }


    
public static void main(String[] args) throws Exception {
        print(Thread.currentThread().getContextClassLoader().getResource(
""));
        print(CurrentDirectory.
class.getClassLoader().getResource(""));
        
//print(this.getClass().getResource("/").toString().replace("file:/", "")); //在非静态方法中可以使用
        print(ClassLoader.getSystemResource(""));
        print(CurrentDirectory.
class.getResource(""));
        print(CurrentDirectory.
class.getResource("/"));
        print(
new File("").getAbsolutePath());
        print(System.getProperty(
"user.dir"));
    }

    
}


posted @ 2014-02-24 10:43 一堣而安 阅读(173) | 评论 (0)编辑 收藏

jQuery data()

http://jianfulove.iteye.com/blog/1842254

posted @ 2014-01-01 19:05 一堣而安 阅读(155) | 评论 (0)编辑 收藏

javascript深入学习

http://www.laruence.com/2009/09/23/1089.html

posted @ 2014-01-01 16:54 一堣而安 阅读(170) | 评论 (0)编辑 收藏

树形全部展示代码

jsp:代码

<script type="text/javascript">

  $(function(){
   //alert('${tip}');
   if('${tip}'!=''){
    $('#tip').css('display','inline-block');
   }
  });
 
  var zTreeObj;
  var allSelectedId="";
  var allSelectedName = "";
  var zNodes = ${data};
  var setting = {
   isSimpleData: true,
   treeNodeKey: "id",         //设置节点唯一标识属性名称
   treeNodeParentKey: "pId",  //设置节点的父节点唯一标识属性名称
   nameCol: "name",           //设置 zTree 显示节点名称的属性名称,此处默认为Name
   showLine: true,            //在树型中是否显示线条样式
   
   check: {
    enable: true,
    chkStyle: "<%=type%>",
    chkboxType: <%=chkboxType%>,
    radioType: "all"
   },
   callback: {
    onClick: onClick
   },
   data: {
    simpleData: {
     enable: true
    }
   }
  };
   
  $(function(){
   $("#btnClose").bind("click",doClose);
   $("#btnConfirm").bind("click",doConfirm);
   zTreeObj = $("#tree").zTree(setting,zNodes);
  });
  
  //关闭窗口
  function doClose(){
   window.close();
  }
   
  function doConfirm(){
   var checkedNodes = zTreeObj.getCheckedNodes(true);
   alert(checkedNodes);
   for (i=0;i<checkedNodes.length;i++) {
   
    var treeNode = checkedNodes[i];
    alert(treeNode.id);
     if(!treeNode.open){
      allSelectedId += (allSelectedId == "" ? "" : ",") + treeNode.id;
      allSelectedName += (allSelectedName == "" ? "" : ",") + treeNode.name;      
     }
    }
   $('#hiddenId').val(allSelectedId);
   $('#hiddenName').val(allSelectedName);
  }
  
  function showMenu() {
   var deptname = $("#deptname");
   var offset = deptname.offset();
   $("#menu").width(deptname.width())
   .css({left:offset.left + "px", top:offset.top + deptname.outerHeight() + "px"})
   .slideDown("fast");
  }
  
  function hideMenu() {
   $("#menu").fadeOut("fast");
  }
  
  function onClick(e, treeId, treeNode) {
   alert(treeId);
   if(treeNode.checked){
    hideMenu();
   }else{
    zTreeObj.checkNode(treeNode, true, null, true);
   }
   return false;
  }
  
  function onCheck(e, treeId, treeNode){
   alert(treeNode.id);
   allSelectedId += (allSelectedId == "" ? "" : ",") + treeNode.pId+"|"+treeNode.id+"|"+treeNode.name;
  }
 </script>

java代码:

public class CameraTreeAPI {
 private static Logger log = Logger.getLogger(CameraTreeAPI.class);
 
 /**
  *
  * 功能说明:获取整个ztree摄像头树
  * @return  满足ztree要求的json数据
  * String
  * @author chh
  * @Jun 14, 2012
  */
 public  String getZTree(String systemUnid,String selectUnid){
  selectUnid = ","+StrUtil.formatNull(selectUnid)+",";
  JSONArray array = new JSONArray();
  try{
   List<BusinessCamera> list = new BusinessCameraManager().doFindBySystemUnid(systemUnid);
   
   JSONObject top = new JSONObject();
   top.put("id","0");
   top.put("name","摄像头列表");
   top.put("open",true);
   array.add(top);
   
   if(list!=null && list.size()>0){    
    for(Object object : list){
     BusinessCamera camera = (BusinessCamera)object;
     JSONObject json = new JSONObject();
     json.put("id",camera.getUnid());
     json.put("name",camera.getName());
     json.put("pId",camera.getPunid());
     json.put("checked", selectUnid.indexOf(camera.getUnid()) >= 0);
     if(hasChildren(list,camera)){
      json.put("open",true);
     }
     array.add(json);
    }
   }
  }catch(Exception e){
   e.printStackTrace();
   log.error(e.getMessage(),e);
  }
  return array.toString();
 }
 
 public boolean hasChildren(List<BusinessCamera> allData,BusinessCamera camera){
  if(allData == null || allData.isEmpty() || camera == null){
   return false;
  }
  for(BusinessCamera unit : allData){
   if(unit.getUnid().equalsIgnoreCase(camera.getUnid())){
    continue;
   }
   if(camera.getUnid().equalsIgnoreCase(unit.getPunid())){
    return true;
   }
  }
  return false;
 }
 
}


posted @ 2013-12-30 19:16 一堣而安 阅读(217) | 评论 (0)编辑 收藏

oracle导出表结构的几种方法。

1.在cmd中输入 exp username/password@连接串

  回车,在进入如下时,输入no,就ok了

  导出表数据(yes/no):yes> no

  2.

  进入plsql

  找到table那个大项,点出来,下边会罗列出许多表

  右键点中你所需要的那个表名

  找到DBMS_Metadata

  然后选项里有ddl

  弹出来那个窗口就是你的表结构,拷贝出来直接在另一个库里执行就可以啦

  -----------------------------补充------------------------

  PLSQL里

  tools下

  export user objects of

  按shift批量选择表

  执行就行了

  3

  exp/imp工具;

  带参数:rows=y —— 带数据导出导入;

  rows=n —— 不带数据的导出导入,只移植结构

  只导出3张表的结构:

  exp user/pasword@dbServerName owner=user tables=(tb1,tb2,tb3) rows=n file=c:\1.dmp

  连带数据导出:

  exp user/pasword@dbServerName owner=user tables=(tb1,tb2,tb3) rows=y file=c:\2.dmp

  imp user2/pasword@dbServerName2 fromuser=user touser=user2 file=c:\1.dmp

  或者

  imp user2/pasword@dbServerName2 fromuser=user touser=user2 file=c:\2.dmp

  3

  方法一:

  exp userid=scott/tiger owner=scott

  imp userid=scott/tiger full=y indexfile=scott.sql

  ……

  more scott.sql

  REM   CREATE TABLE "SCOTT"."BONUS" ("ENAME" VARCHAR2(10), "JOB"

  REM   VARCHAR2(9), "SAL" NUMBER, "COMM" NUMBER) PCTFREE 10 PCTUSED 40

  REM   INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST

  REM   GROUPS 1) TABLESPACE "USERS" LOGGING NOCOMPRESS ;

  REM   ... 0 rows

  REM   CREATE TABLE "SCOTT"."DEPT" ("DEPTNO" NUMBER(2, 0), "DNAME"

  REM   VARCHAR2(14), "LOC" VARCHAR2(13)) PCTFREE 10 PCTUSED 40 INITRANS 1

  REM   MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1)

  REM   TABLESPACE "USERS" LOGGING NOCOMPRESS ;

  REM   ... 4 rows

  REM CREATE TABLE "SCOTT"."DUMMY" ("DUMMY" NUMBER) PCTFREE 10 PCTUSED 40

  REM   INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST

  REM   GROUPS 1) TABLESPACE "USERS" LOGGING NOCOMPRESS ;

  REM   ... 1 rows

  REM   CREATE TABLE "SCOTT"."EMP" ("EMPNO" NUMBER(4, 0) NOT NULL ENABLE,

  REM   "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4, 0),

  REM   "HIREDATE" DATE, "SAL" NUMBER(7, 2), "COMM" NUMBER(7, 2), "DEPTNO"

  REM   NUMBER(2, 0)) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255

  REM   STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1) TABLESPACE

  REM   "USERS" LOGGING NOCOMPRESS ;

  REM   ... 14 rows

  REM   CREATE TABLE "SCOTT"."SALGRADE" ("GRADE" NUMBER, "LOSAL" NUMBER,

  REM   "HISAL" NUMBER) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255

  REM   STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1) TABLESPACE

  REM   "USERS" LOGGING NOCOMPRESS ;

  REM   ... 5 rows

  …………

  把前面的REM去了,再去掉最后一行,创建表的DDL就OK了。

  方法二:

  set pagesize 0

  set long 90000

  set feedback off

  set echo off

  spool get_allddl.sql

  connect USERNAME/PASSWORD@SID;

  SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name)

  FROM USER_TABLES u;

  SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name)

  FROM USER_INDEXES u;

  spool off;

  My Test:

  set pagesize 0

  set long 90000

  set feedback off

  set echo off

  spool get_allddl.sql

  connect username/password@database;

  SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name)

  FROM USER_TABLES u where table_name = 'USER_INFO';

  spool off;

  SET HEADING OFF;

  SET ECHO OFF;

  SET LONG 90000;

  SPOOL D:\test.txt

  SELECT dbms_metadata.get_ddl('TABLE','USER_INFO') FROM SYS.DBA_USERS WHERE USERNAME = 'GINGKO';

  SPOOL OFF;

posted @ 2013-12-25 16:16 一堣而安 阅读(2582) | 评论 (0)编辑 收藏

oracle在导入时指定不导入某张表

原文:http://www.itpub.net/forum.php?mod=viewthread&tid=1762028

1. 先手动重建表结构,因为这张表不需要导入,表结构可以随表写,目的是使表名存在:
create table table_name (x int); --table_name为不需要导入的表。

2. 导入的时候加参数ignore=n

quote:
ignore参数
Oracle在恢复数据的过程中,当恢复某个表时,该表已经存在,就要根据ignore参数的设置来决定如何操作。
若ignore=y,Oracle不执行CREATE TABLE语句,直接将数据插入到表中,如果插入的记录违背了约束条件,比如主键约束,则出错的记录不会插入,但合法的记录会添加到表中。
若ignore=n,Oracle不执行CREATE TABLE语句,同时也不会将数据插入到表中,而是忽略该表的错误,继续恢复下一个表。


3. 全部导入完之后,删除该表即可。


说明:一般情况下,不需要导入某张表,是因为这张表数据量庞大,但是没有导入需求。所以可以使用以上方法导入。如果表很小,导入也无妨。

posted @ 2013-12-16 11:11 一堣而安 阅读(1142) | 评论 (0)编辑 收藏

手动重建em资料库

1, 删除建立失败的em档案库:

C:\Documents and Settings\Administrator>emca -deconfig dbcontrol db -repos drop

EMCA 开始于 2011-4-23 11:19:18

EM Configuration Assistant, 11.1.0.5.0 正式版

版权所有 (c) 2003, 2005, Oracle。保留所有权利。

输入以下信息:

数据库 SID: verafzy

监听程序端口号: 1521

SYS 用户的口令:

SYSMAN 用户的口令:

SYSMAN 用户的口令:

是否继续? [是(Y)/否(N)]: y

2009-7-23 11:19:40 oracle.sysman.emcp.EMConfig perform

信息: 正在将此操作记录到 E:\app\Administrator\cfgtoollogs\emca\verafzy\emca_2011-4-23 _11_19_17.log。

2011-4-23 11:19:42 oracle.sysman.emcp.util.DBControlUtil stopOMS

信息: 正在停止 Database Control (此操作可能需要一段时间)...

2011-4-23 11:20:23 oracle.sysman.emcp.EMReposConfig invoke

信息: 正在删除 EM 资料档案库 (此操作可能需要一段时间)...

2011-4-23 11:24:42 oracle.sysman.emcp.EMReposConfig invoke

信息: 已成功删除资料档案库

已成功完成 Enterprise Manager 的配置

EMCA 结束于 2011-4-23 11:24:56

2, 重新创建em档案库:

C:\Documents and Settings\Administrator>emca -config dbcontrol db -repos create

EMCA 开始于 2011-4-23 11:26:55

EM Configuration Assistant, 11.1.0.5.0 正式版

版权所有 (c) 2003, 2005, Oracle。保留所有权利。

输入以下信息:

数据库 SID: verafzy

监听程序端口号: 1521

SYS 用户的口令:

DBSNMP 用户的口令:

SYSMAN 用户的口令:

SYSMAN 用户的口令: 通知的电子邮件地址 (可选):

通知的发件 (SMTP) 服务器 (可选):

-----------------------------------------------------------------

已指定以下设置

数据库 ORACLE_HOME ................ E:\app\Administrator\product\11.1.0\db_1

本地主机名 ................ PC-200901030636

监听程序端口号 ................ 1521

数据库 SID ................ verafzy

通知的电子邮件地址 ...............

通知的发件 (SMTP) 服务器 ...............

是否继续? [是(Y)/否(N)]: y

posted @ 2013-12-12 20:08 一堣而安 阅读(279) | 评论 (0)编辑 收藏

用JS清除缓存(document.cookie)

(转)此文为转载,实在不好意思,原文地址丢了没有附上。

function foreach() {
 var strCookie = document.cookie;
 var arrCookie = strCookie.split("; "); // 将多cookie切割为多个名/值对
 for ( var i = 0; i < arrCookie.length; i++) { // 遍历cookie数组,处理每个cookie对
  var arr = arrCookie[i].split("=");
  if (arr.length > 0)
   DelCookie(arr[0]);
 }

}
function GetCooki(offset)
{
 var endstr = document.cookie.indexOf(";", offset);
 if (endstr == -1)
  endstr = document.cookie.length;
 return decodeURIComponent(document.cookie.substring(offset, endstr));
}
function DelCookie(name) {
 var exp = new Date();
 exp.setTime(exp.getTime() - 1);
 var cval = GetCookie(name);
 document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString()+"; path=/"; //不断的尝试曾经使用过的path值
}

function GetCookie(name) {
 var arg = name + "=";
 var alen = arg.length;
 var clen = document.cookie.length;
 var i = 0;
 while (i < clen) {
  var j = i + alen;
  if (document.cookie.substring(i, j) == arg)
   return GetCooki(j);
  i = document.cookie.indexOf(" ", i) + 1;
  if (i == 0)
   break;
 }
 return null;
}

另外推荐2个文章:

http://blog.sina.com.cn/s/blog_537cdd2e0100pxcz.html

http://www.mzone.cc/article/363.html


 

posted @ 2013-12-11 14:34 一堣而安 阅读(969) | 评论 (0)编辑 收藏

复选框文字对齐显示

最近的工作中,有很多表单的制作,很多次都碰到复选框与文字对齐的问题,发现在不同的浏览器中,显示各异,显示效果如下

观察发现,IE6、IE7 显示效果基本相同,算是显示比较正常的效果,IE8、safari 和火狐显示效果基本相同,两个文字都偏下,而opera稍偏下。在之前我的解决方法,都是通过文字外面套上另外的标签,等,通过调整input标签和label的html标签来对齐,大概方法即是让input 和label 标签都左浮动,但前提一定是在写页面的时候,文字外面加了label 标签,这种方法应为定义了大量的浮动,还需要清除浮动,才能保证下面页面的正常显示,或者有些人用相对定位等方法,如果文字外面没有套label标签,更没有其他标签呢?经过查找,发现其实还是有很简单的方法就能解决问题

方法一:如果将font-family中的第一个字体设置为Tahoma,则可以实现对齐(Verdana等字体也可以)。次方法来源与 蓝色理想 http://www.blueidea.com/tech/web/2009/6910_3.asp

 

 

如果文字外面有label 标签,只要定义input,label {vertical-align:middle} 即可,

注意:因为单选框或是复选框有外边距,所以需要先去除掉他的外边距。

方法二: 定义input 标签vertical-align  属性,调整input 的上下边距,来实现input和文字的水平对齐

.admin_more  input{vertical-align: text-bottom; margin-bottom:2px; *margin-bottom:-2px;}

原文:

http://blog.csdn.net/lifen_zhang/article/details/5415768

posted @ 2013-12-08 21:48 一堣而安 阅读(167) | 评论 (0)编辑 收藏

仅列出标题
共17页: First 上一页 3 4 5 6 7 8 9 10 11 下一页 Last 

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

收藏夹

搜索

最新评论

阅读排行榜

评论排行榜