Tag Archive for ‘iphone’

伪造?还是检测信用卡 cocoa, Objc实现

伪造? 还是去检测一张信用卡? 看完这个图, 相信很容易了解其中的数学算法.

原始链接:http://www.geekv5.com/archives/2859

英文原始链接:http://www.mint.com/blog/trends/credit-card-code-01202011/

好了其实这个小知识还是很有趣的, 作为向geek前进的我们, 怎么能不知道这样的小trick.

看见这个,会想起什么?我们的思维真的会从伪造信用卡这个keywrod延伸到,卡片的生产,怎么把磁条信息录入,怎么去设这个陷阱让人踩了还不知道?

至少我不是的。。我第一个想到的是如果我有一个iphone,我的iphone上有一个软件通过摄像头,对着一张信用卡来信用卡真伪识别。So cool? 其实这样的思维常常出现在每个人的脑海中,那些so cool的创意程序可能就在这瞬间的头脑风暴产生了。好吧,其实本不应该说这么多的。其实我是想鼓励自己,纸上得来终觉浅,绝知此事要躬行,just do it.

其实这个信用卡真伪的识别是基于,一个叫做Luhn 的算法 详细内容请移步 http://en.wikipedia.org/wiki/Luhn_algorithm

我对这个算法的描述就是:

  • 从右倒左, 偶数位 * 2, 如果偶数大于10, 则个位+(十位/10)
  • 把奇数位和刚刚得出的偶数位相加得出 sum
  • sum如果能够mod 10 = 0 那就是正确的

这里给出C的code, wikipedia里面有java和pyhon的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
The Luhn Mod-10 Method (ISO 2894/ANSI 4.13) involves a check digit in the
one's position.  The check digit is calculated starting at the right with
the digit immediately preceding the check digit (ten's digit) and moving
toward the left, doubling every other digit.  If a doubled digit is greater
than nine, the two digits are added to together to obtain a single-digit
result.  The sum of all the resulting digits (including those skipped) is then
taken modulo with 10, to obtain the check digit.
 
Below, is untested code.
 
/************************************************************************
*  LuhnMod10 - self-checking scheme for validating card account numbers
*  according to ISO 2894/ANSI 4.13.
*
*    Ex:  cardNumber = "795102879015546"
*         strlen(cardNumber) == 15
*         LuhnMod10(cardNumber, 14) == 6 == cardNumber[14]
*
************************************************************************/
int LuhnMod10(char* cardNumber, int size)
{
  static int table[2][10] = { {0,1,2,3,4,5,6,7,8,9}, {0,2,4,6,8,1,3,5,7,9} };
 
  for (int i=size-1, odd=0, sum=0; i>=0; i--)
    if (isdigit(cardNumber[i]))
      sum += table[(odd=1-odd)][cardNumber[i]-'0'];
  sum %= 10;
  return (sum ? 10-sum : 0);               /* return the check digit */
}

站在巨人的肩膀是不是有一种很强大的感觉。好吧,我们既然要把要在iphone上实现,那首先需要一个Objective-C的代码. here is it ,从C代码修改过来并不是很难。

CheckCreditCard.h

1
2
3
4
5
6
7
8
9
#import 
 
@interface CheckCreditCard : NSObject {
	IBOutlet NSTextField *ccNum;
	IBOutlet NSTextField *ccTrue;
 
}
- (IBAction)checkIt:(id)sender;
@end

CheckCreditCard.m

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//  CheckCreditCard.m
//  Verify Credit Card
//
//  Created by cyher on 11-3-8.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//
 
#import "CheckCreditCard.h"
 
@implementation CheckCreditCard
 
- (id)init
{
	[super init];
	NSLog(@"Init!");
	return self;
}
 
- (IBAction)checkIt:(id)sender
{
	int sumTable[10][10] = {{0,1,2,3,4,5,6,7,8,9},{0,2,4,6,8,1,3,5,7,9}};
	int sum = 0, flip = 0;
 
	NSString *string = [ccNum stringValue];
	NSLog(@"ccNum = %@", string);
	if ([string length] == 0)
		return;
	for (int i = [string length] - 1; i >= 0; i--)
		sum +=
		sumTable[flip++ & 0x1][[string characterAtIndex:i] - '0'];
	NSLog(@"sum = %d", sum);
	if (0 == (sum % 10)) {
		[ccTrue setStringValue:[NSString stringWithFormat
				       :@"This is a real Credit Card!",
				       [string length]]];
	} else {
		[ccTrue setStringValue:[NSString stringWithFormat
					:@"This is fake Credit Card!",
					[string length]]];
	}
 
	return;
}
 
@end

来我们看看在mac上的效果吧:

 

怎么样很简单吧, 如果我们能够调用goggle(google的图形识别程序,基于云计算)的API,我们能够从图片转换成数字。其实一个有意思的小软件就成了. 希望我们能运用生活中的小科技, 来改变我们的生活吧.

 

 

apple,我也尝尝!

好几年了,情人节都是一个人过,今年干脆不过.这不去找了一个小M陪我!废话先不说,上图:

情人节这样过,还不错吧,我本来是想买467+touch的,但是看见470以后真得走不动了,这里提醒大家理性消费.不过说句实话,apple的东西不需要理性的,因为不管你买了哪一款她总是最好的,你总能找到你买她的理由,要不怎么那么多人在好几款机子中犹豫呢.言归正传,我对macbook pro写一些感受把.

1.工业设计&工业制造
apple的这两项绝对是首屈一指,没啥说的,给人的美感确实不是一般产品能给的.一体成型全铝的机身,镜面屏幕(专业作图的可能不怎么看好),从上面dell d610, thinkpad t61,的比较图来看,也不用我多说了.再说说本来我是想买macbook的但是,当我把467和470放在一起的时候,我就知道大屏的魅力, pro和macbook比的话,只能说是更完美.但是更重了,还好我不怎么追求移动性.由于我的摄影水平很烂,相机也很烂,所以好多细节我都没有敢拍,有macbook 的同志都知道,想买的同志希望能去三里屯体验一下, 科技应该是让你更轻松. 

2.硬件
参数我就不多说了,我只说说我的感受,15.4的led真的不是吹的,咱不是专业作图的,这个也就是咱能看见最好的屏幕了.p8600对我来说绝对够用了,开了10多个网页,装软件,自动升级,qq,msn,fetion都开开,itunes,iphoto ,这不是我刻意开的,我只是开了就没有关,但是我丝毫没有感觉一点的迟钝,当我用4指向下一画的时候我才发现.总之,我不知道她的极限是什么样的,回来给加到4G估计能更爽.(我说我应该买macbook吧)浪费了……..关于散热的问题,如果不开独立显卡,还是很不错的,这几天天冷,家里的温度也就15度,机子没有什么感觉,但是开了独立显卡,左手就有点热了,不敢想夏天是什么样的.

3. X
这个是我最看中的地方,我是一个linux上的程序员,我喜欢类unix的东西,这就是我选择macbook初衷.至于mac os到底有多强,暂时我不能用技术的语言说,我只能说,从我的感受来说,macos是我用过最强的,最好用的OS.关于我对linux和macos的理解这里有说.我曾经在我的dell本子上装了linux和mac os对比下来,在图形方面linux还有很久的路要走,虽然界面已经很绚丽,但是稳定性和易用性有待提高.很喜欢mac系统的简介高效,你不必为一些琐事而浪费你的时间,如果你是diyer我觉得装个linux来满足自己.关于windows我这里也说两句,我对这个系统没有什么好感,在我的世界里,它只是一个工具,不想linux和mac os是一种信仰,如果大家买了mac希望大家不要装双系统,最多弄个虚拟机偶尔运行一下windows弄个网银什么的就完了,因为我们正在为windows的低效操作浪费时间,图形没有mac好,cli没有linux强,对于windows的性能和效率我觉得我还没有资格评论,但是事实能告诉大家.让mac带你走进,你本来应该有的世界,当你用过macos的时候你能感觉到什么叫简约而不简单…….

4.&ipod touch
大家都看见我上面的图片了,有一个iphone和一个touch,touch是同学和我一起去买的,我本来也想买一个的.这两个手持设备,现在已经家喻户晓了,我也就不用多介绍了,再说也是上面的那一套,但是我也要感叹一下apple的做事风格,简简单单的产品线,不能和任何一个大公司的产品线的数量比,但是这就体现了专注的好处!记得jobs说过,我们把精力专注于我们的一种产品,我们就能做出更完美的产品.

5.apple是一种文化
这个大家都明白,我也是apple的fans.这种文化,让我们的生活多了几分情趣,让我们的视野开阔了许多.应了apple store里面的一个导购说的话:”apple正在改变你的生活!”. 

 

手机操作系统这点事

手机操作系统

手机操作系统

       瘾科技上有这么一则投票,你喜欢那个手机操作系统?那么就去看看结果吧.上图几个手机都是这些操作系统的代表作(现今最牛逼的各个操作系统的代表).

手机操作系统,说来话长,除了iphoneOS和android,都有比较悠久的历史:
windows mobile英文, 中文palm OS英文,中文symbian英文 , 中文;我很早之前就开始关注,也许不能说是关注,就是在其中找乐子.我的历史:首先我得到了一个palm zire 72,被palmOS的快速便捷震撼了(当时可没有multi-touch),就在胖友和蜥蜴的争吵中我了解了windowsCE,也就是现在的mobile ,于是也就有了一段mobile生涯,但是总是win它毕竟是”瘟”啊,在哪都一样!索性symbian一把,symbian确实让人眼前一亮,但是大同小异,没有什么出色的地方(说是实时性比较好,在n73上的龟速,也不是一个palmer能忍受的).接下来的日子Mac OS X的iphone版告诉我,快速和绚丽原来是可以并存的!我也算一代败家…..操作系统是感受过了,手机也换了不少.

研究嵌入式也有一段时间了,这些手机操作系统,确切的说都是嵌入式操作系统,
基本上都是基于ARM的,嵌入式系统是离不开硬件的(android例外).iphoneOS,,WebOS都是类UNIX的,前者是unix后两个是linux内核,这就意味这,这几款手机的实时性不好,但是话说回来,手机这东西感觉要实时性没什么用.symbian和windowsMobile是实时性好,但是看来也没强到哪里去…看来现在有些嵌入式的性能指标我们是可以忽略的!现在什么最重要?好了现在看看文章最上面的那张图,得出什么结论了么?

      大屏:这几个手机的屏幕都是属于业界前端的,尤其是索爱的X1更是登峰造极,这要求在整个操作系统的图形系统要很好,硬件也要支持.
      触摸:windows上的触摸技术已经达到了一个新的高度,但是就是现在还没有多点触硬件支持,iphone就不用说了,perfect!palm pre用的屏也是电容式的,webOS同样支持multi-touch.nokia好像也有什么手势技术,不过现在还没有出来就不说了.android实在是太低调了,听说支持mutli-touch就是没有启用….
      网络:这几款手机哪个不是网络应用非常牛,windows和symbian要黯淡许多!看人家palm多直接webOS,不过据我推测,这个webOS的命名是因为在webOS上开发可以用html5,css等web语言得来的把.这就要求操作系统在网络支持上面要越来越强,可怜的windows在这点上我觉得你比不上原生于服务器的linux和BSD–iphoneOS.
      MID:这个名词在2008年着实火疯了,上面几款手机有3款有全键盘,都有硕大的屏幕,全面的网络接入,高性能的硬件,无数的应用软件和大量的开发人员支持,好了现在把前面叙述的特点在脑中想一下,确实能和MID比一下了,以后MID和手机之间的界限将被这些手机和OS变的模糊. 

  这给我们程序员带来了什么呢?
  看看app store中iphone的软件下载量,5个月1万个应用5亿次下载.
有多少人就写了个iphone的软件一夜几万美元.说笑,不过google也如法炮制同样也有app store,palm也有了.给了程序员一次很好的机会,不管是java,web,c程序员都会在移动平台找到他位置的.再说android的山寨方案,这就是嵌入式linux的程序员的机会了,依据不同的硬件移植android,恩,很不错?!

  坐观风云变!自己也要想点什么了.

About

You are currently browsing the Cyher.NET weblog archives for 'iphone' tag.