仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 715|回复: 7
打印 上一主题 下一主题

[学习教程] MSSQL网站制作之身份证考证

[复制链接]
海妖 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:25:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
也就是说在php本地调用pdoprepare中的mysql_real_escape_string来操作query,使用的是本地单字节字符集,即编码为xbfx5cx27,并带入到mysql中查询,由于使用setnames设置了连接字符集.

alterfunctiondbo.IDTrue--考证十八位身份证是不是准确
(
@IDvarchar(18)
)
returnsbit
as
begin
--考证格局是不是准确
declare@RESbit
declare@Wtable(rnint,valint)
insertinto@W(rn,val)
select1,7
unionselect2,9
unionselect3,10
unionselect4,5
unionselect5,8
unionselect6,4
unionselect7,2
unionselect8,1
unionselect9,6
unionselect10,3
unionselect11,7
unionselect12,9
unionselect13,10
unionselect14,5
unionselect15,8
unionselect16,4
unionselect17,2
unionselect18,1
declare@Atable(rwnint,valvarchar(1))
insertinto@A(rwn,val)
select0,1
insertinto@A(rwn,val)
select1,0
insertinto@A(rwn,val)
select2,X
insertinto@A(rwn,val)
select3,9
insertinto@A(rwn,val)
select4,8
insertinto@A(rwn,val)
select5,7
insertinto@A(rwn,val)
select6,6
insertinto@A(rwn,val)
select7,5
insertinto@A(rwn,val)
select8,4
insertinto@A(rwn,val)
select9,3
insertinto@A(rwn,val)
select10,2
declare@iint
declare@jint
declare@Sint

iflen(@ID)=18
begin
select@S=0,@i=1
declare@IDIint
declare@WIint
declare@PIIvarchar(1)
while@i<=17
begin
select@PII=substring(@ID,@i,1)
if@PIIlike[0-9]
begin
select@IDI=convert(int,@PII)
select@WI=valfrom@Wwherern=@i
select@j=@IDI*@WI
select@S=@S+@j
select@i=@i+1
end
else
begin
select@RES=0
return@RES
end

end
select@S=@S%11
select@IDI=convert(int,substring(@ID,18,1))
declare@pivarchar(1)
select@pi=valfrom@Awhererwn=@S
if@pi=@IDI
select@RES=1
else
select@RES=0
end
else
begin
select@RES=0
end
return@RES
end
go
declare@pcbit
select@pc=dbo.IDTrue(420324198101031224)
select@pc
go

alterfunctionSFZ15To18--十五位升十八
(
@sfzvarchar(15)
)
returnsvarchar(18)
as
begin
declare@Wtable(rnint,valint)
insertinto@W(rn,val)
select1,7
unionselect2,9
unionselect3,10
unionselect4,5
unionselect5,8
unionselect6,4
unionselect7,2
unionselect8,1
unionselect9,6
unionselect10,3
unionselect11,7
unionselect12,9
unionselect13,10
unionselect14,5
unionselect15,8
unionselect16,4
unionselect17,2
unionselect18,1
declare@Atable(rwnint,valvarchar(1))
insertinto@A(rwn,val)
select0,1
insertinto@A(rwn,val)
select1,0
insertinto@A(rwn,val)
select2,X
insertinto@A(rwn,val)
select3,9
insertinto@A(rwn,val)
select4,8
insertinto@A(rwn,val)
select5,7
insertinto@A(rwn,val)
select6,6
insertinto@A(rwn,val)
select7,5
insertinto@A(rwn,val)
select8,4
insertinto@A(rwn,val)
select9,3
insertinto@A(rwn,val)
select10,2
declare@NEWIDvarchar(18)
select@NEWID=substring(@sfz,1,6)+19+substring(@sfz,7,9)
declare@iint
declare@jint
declare@Sint
select@S=0,@i=1
declare@IDIint
declare@WIint
declare@PIIvarchar(1)
while@i<=17
begin
select@PII=substring(@NEWID,@i,1)
if@PIIlike[0-9]
begin
select@IDI=convert(int,@PII)
select@WI=valfrom@Wwherern=@i
select@j=@IDI*@WI
select@S=@S+@j
select@i=@i+1
end
else
begin
return
end
end
select@S=@S%11
declare@pivarchar(1)
select@pi=valfrom@Awhererwn=@S
select@NEWID=@NEWID+@pi
return@NEWID

end
go
selectdbo.SFZ15To18(420324810103153)
go
--日期是不是准确
alterfunctionChkYMD(
@yint,
@mtinyint,
@dtinyint,
@cyint
)
returnsbit
as
begin
declare@resbit
select@res=1
if@y<1900or@y>@cy
begin
select@res=0
return@res
end
if@m=1or@m=3or@m=5or@m=7or@m=8or@m=10or@m=12
begin
if(@d<1)or(@d>31)
begin
select@res=0
return@res
end
end

if@m=2
begin
if((@y%4)=0)and((@y%100)0)or((@y%400)=0)
begin--闰年
if(@d<1)or(@d>29)
begin
select@res=0
return@res
end
endelse
begin
if(@d<1)or(@d>28)
begin
select@res=0
return@res
end
end

end
if@m=4or@m=6or@m=9or@m=11
begin
if(@d<1)or(@d>30)
begin
select@res=0
return@res
end
end
return@res

end
go
selectdbo.chkymd(1981,1,3,Year(getdate()))
go
/*
y:年,m:月,d:日。在参数都只传进响应的整数
前往值:0礼拜一
1礼拜2
2礼拜3
3礼拜4
4礼拜5
5礼拜6
6礼拜7
*/

alterfunctionGetWeekDay(
@yint,
@mint,
@dint
)
returnstinyint
as
begin
declare@atinyint
select@a=7
if@m=1or@m=2
begin
select@m=@m+12
select@y=@y-1
end
select@a=(@d+2*@m+3*(@m+1)/5+@y+@y/4-@y/100+@y/400)%7;
return@a
end
go
selectdbo.getweekday(2004,12,10)
Mysql的存储引擎接口定义良好。有兴趣的开发者可以通过阅读文档编写自己的存储引擎。
海妖 该用户已被删除
沙发
 楼主| 发表于 2015-1-19 11:12:55 | 只看该作者
如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录.
板凳
发表于 2015-1-25 08:39:33 | 只看该作者
如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。
第二个灵魂 该用户已被删除
地板
发表于 2015-2-2 18:32:44 来自手机 | 只看该作者
所以你总能得到相应的升级版本,来满足你的需求。
admin 该用户已被删除
5#
发表于 2015-2-8 04:20:37 | 只看该作者
我们学到了什么?思考问题的时候从表的角度来思考问
精灵巫婆 该用户已被删除
6#
发表于 2015-2-24 06:27:50 | 只看该作者
但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。(500万数量级只相差10%左右)
不帅 该用户已被删除
7#
发表于 2015-3-15 05:13:07 | 只看该作者
换言之,只有在不断的失败中尝试成功,而关于失败的总结却是很少的
爱飞 该用户已被删除
8#
发表于 2015-3-21 18:48:48 | 只看该作者
理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-29 14:33

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表