国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

長鏈接轉換成短鏈接(iOS版本)

2019-11-14 20:30:44
字體:
來源:轉載
供稿:網友

首先需要將字符串使用md5加密,添加NSString的md5的類別方法如下

.h文件

#import <CommonCrypto/CommonDigest.h>

 

@interface NSString (md5)

 

-(NSString *) md5HexDigest;

 

@end

.m文件

 

 

#import "NSString+md5.h"

 

@implementation NSString (md5)

 

- (NSString *) md5HexDigest

{

    const char *original_str = [self UTF8String];

    unsignedchar result[CC_MD5_DIGEST_LENGTH];

    CC_MD5(original_str, strlen(original_str), result);

    NSMutableString *hash = [NSMutableStringstring];

    for (int i = 0; i < 16; i++)

        [hash appendFormat:@"%02X", result[i]];

    NSLog(@"lowercaseString = %@",[hash lowercaseString]);

    return [hash lowercaseString];

}

 

@end

 

然后就是轉換算法了,其實與java版本的相同,只是用OC來實現

 

- (NSString *)shortUrl:(NSString *)url

{

    NSArray *chars = [[NSArray alloc] initWithObjects:@"a" , @"b" , @"c" , @"d" , @"e" , @"f" , @"g" , @"h" ,

                      @"i" , @"j" , @"k" , @"l" , @"m" , @"n" , @"o" , @"p" , @"q" , @"r" , @"s" , @"t" ,

                      @"u" , @"v" , @"w" , @"x" , @"y" , @"z" , @"0" , @"1" , @"2" , @"3" , @"4" , @"5" ,

                      @"6" , @"7" , @"8" , @"9" , @"A" , @"B" , @"C" , @"D" , @"E" , @"F" , @"G" , @"H" ,

                      @"I" , @"J" , @"K" , @"L" , @"M" , @"N" , @"O" , @"P" , @"Q" , @"R" , @"S" , @"T" ,

                      @"U" , @"V" , @"W" , @"X" , @"Y" , @"Z", nil];

    NSLog(@"chars = %d", [chars count]);

    NSString *key = @"xxxxxx";

    NSString *hex = [NSStringstringWithFormat:@"%@",[[key stringByAppendingFormat:@"%@",url] md5HexDigest]];

 

    NSLog(@"hex = %@", hex);

    NSMutableArray *resUrl = [[NSMutableArrayalloc] initWithCapacity:4];

    for (int i=0; i<4; i++) {

        // 把加密字符按照 8 位一組 16 進制與 0x3FFFFFFF 進行位與運算

        NSString *sTempSubString = [hex substringWithRange:NSMakeRange(i*8, 8)];

        

        // 這里需要使用 long 型來轉換,因為 Inteper只能處理 31 , 首位為符號位 , 如果不用 long ,則會越界

        long longOfTemp;

        sscanf([sTempSubString cStringUsingEncoding:NSASCIIStringEncoding], "%lx", &longOfTemp);

        long lHexLong = 0x3FFFFFFF & longOfTemp;

        NSString *outChars = @"";

        for (int j=0; j<6; j++) {

            // 把得到的值與 0x0000003D 進行位與運算,取得字符數組 chars 索引

            long index = 0x0000003D & lHexLong;

            // 把取得的字符相加

            outChars = [outChars stringByAppendingFormat:@"%@",[chars objectAtIndex:(int)index]];

            // 每次循環按位右移 5

            lHexLong = lHexLong >> 5;

        }

        // 把字符串存入對應索引的輸出數組

        [resUrl insertObject:outChars atIndex:i];

    }

    return [resUrl objectAtIndex:0];//這里可以返回任意一個元素作為短鏈接(0123

}

 

提 示:長鏈接轉換短鏈接,原理很簡單,就相當于重命名,只是自己的服務器定義自己的規則,有自己的密鑰(也就是算法中定義的key變量,需要替換成自己用品 定義的key),然后確定使用resUrl中的哪個index的元素為可以識別的短鏈接,如果確定為第0個,那么算法中就要返回第0個。要拿來自己用的 話,只需要改一下key值即可。

必須有服務器定義key,要不點擊轉換成功后的鏈接瀏覽器是無法識別的,還有就是這里返回的字符串僅僅是一 串字符,并不帶有域名什么的,還需要自己確定一套域名規則,比如新浪的地址轉換成功后都是以http://t.cn/打頭的,那么你就需要定義一個類似的 域名,具體關于這個域名如何定義請另請高明,本人就不太清楚了!1

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 怀化市| 达尔| 泰来县| 吉安县| 云南省| 武宁县| 肇东市| 新蔡县| 崇明县| 红安县| 延安市| 托里县| 手游| 虞城县| 沙湾县| 聂荣县| 惠水县| 江津市| 洛阳市| 漠河县| 呼图壁县| 迁西县| 綦江县| 色达县| 平顺县| 荣成市| 卓尼县| 调兵山市| 凌云县| 万全县| 商丘市| 常德市| 恩平市| 桃源县| 松桃| 保康县| 汉阴县| 集安市| 博野县| 富裕县| 深州市|