一种基于动态码的租车方法及租车系统、服务器端与流程

文档序号:11201610阅读:314来源:国知局
一种基于动态码的租车方法及租车系统、服务器端与流程

本发明属于智能交通技术领域,尤其涉及一种基于动态码的租车方法,以及与该方法对应的租车系统和服务器端。



背景技术:

为了提倡环保出行,缓解交通压力并且实现资源共享,市政府推出了公共自行车系统。但公共自行车系统在实际使用过程中存在诸多痛点:

痛点一:采取刷卡用车模式,实体卡片容易丢失;

痛点二:有桩租还,站点覆盖范围有限,站点桩位有限,遇到满桩情况不易还车,从站点到目的地还需不行;

痛点三:还车时需要刷卡扣费,系统网络稳定性差;

痛点四:只需服务器发送指令给自行车进行开锁,安全性无法管控而且开锁的方式也较单一化。

痛点五:针对服务器发送指令给自行车的开锁方式,由于服务器与锁保持长连接通讯方式,因此其功耗较高。

针对现有技术中的种种缺陷和不便,提供一种能同时克服以上缺陷的租车方法,以及对应的系统和服务器端是本领域技术人员急需解决的问题。



技术实现要素:

针对以上技术不足,本发明提供了一种基于动态码的租车方法及租车系统、服务器端,可通过匹配动态码与物联锁内部生成的开锁密码来开锁以实现租还车,更便捷更安全及使开锁方式的多样化,同时由于物联锁与服务器端采用短连接通讯方式还可节省物联锁的能耗。

本发明是这样实现的,一种基于动态码的租车方法,其应用于服务器端,包括如下步骤:

a.服务器端接收客户端发出的租车请求,所述租车请求中至少包括用户的信息、定位信息以及物联锁信息;

b.服务器端判断租车请求是否满足条件,若满足,则依据当前时间与所述物联锁信息生成动态码;

c.服务器端将所述动态码发送至客户端;

d.当接收到物联锁发出的开锁信息时,服务器端开始记录用户行程信息;

e.当接收到物联锁发出的关锁信息时,服务器端依据用户行程信息生成用户行程单,并将用户行程单发送至客户端。

优选的,所述物联锁信息通过二维码与物联锁绑定。

优选的,所述用户行程信息至少包括定位信息和开锁时的时间信息,所述用户行程单至少包括所述用户行程信息、关锁时的时间信息、用户的身份标识信息以及使用费用信息。

优选的,服务器端判断租车请求是否满足条件,若满足,则依据当前时间与所述物联锁信息生成动态码具体包括:

b1:服务器端从用户的信息中提取身份标识信息并验证该身份标识信息是否合法,若是,则进入步骤b2;

b2:检测该用户对应的押金信息或信用度是否满足预先设定的要求,若是,则进入步骤b3;

b3:服务器端验证二维码是否为有效二维码;若是,则进入步骤b4;

b4:服务器端提取二维码中物联锁信息并判断所述信息是否合法,若是,则服务器端依据当前时间与所述租车请求包括的物联锁信息生成动态码。

优选的,在步骤e之后还包括如下步骤:服务器端接收客户端发送的缴费信息。

本发明还提供一种基于动态码的租车方法,其应用于物联锁,所述物联锁锁于车轮上,包括如下步骤:

a’.当物联锁感应客户端扫码时,依据物联锁内的当前时间与物联锁信息生成开锁密码,并保存开锁密码;

b’.当接收到输入的动态码时,将所述输入的动态码与开锁密码进行匹配;

c’.当所述输入的动态码与开锁密码匹配成功时,将物联锁进行开锁;

d’.当物联锁开锁或关锁成功时,将开锁信息或关锁信息发送至服务器端。

优选的,所述物联锁在预设时间段内保存开锁密码。

优选的,当接收到输入的动态码时,将所述输入的动态码与开锁密码进行匹配具体包括:

b’1.当接收到输入的动态码时,所述物联锁获取预设时间段内的开锁密码;

b’2.将所述动态码与所述预设时间段内的开锁密码进行匹配。

优选的,在步骤d’之后包括:

物联锁每隔固定时间或预设时长内未开锁,则发送时间较准请求至服务器端以请求时间较准。

本发明实施例还提供.一种基于动态码的租车系统,其应用于服务器端,包括:

接收模块,用于接收客户端发出的租车请求,所述租车请求中至少包括用户的信息、定位信息以及物联锁信息;

处理模块,用于判断租车请求是否满足条件,并在满足条件时,则依据当前时间与所述物联锁信息生成动态码;

发送模块,用于将所述动态码发送至客户端;

所述处理模块,还用于当所述接收模块接收到物联锁发出的开锁信息时,开始记录用户行程信息;

所述处理模块,还用于当接收模块接收到物联锁发出的关锁信息时,依据用户行程信息生成用户行程单,并通过发送模块将用户行程单发送至客户端。

优选的,所述用户行程信息至少包括定位信息和开锁时的时间信息,所述用户行程单至少包括所述用户行程信息、关锁时的时间信息、用户的身份标识信息以及使用费用信息。

优选的,所述处理模块判断租车请求是否满足条件,并在满足条件时,依据当前时间与所述物联锁信息生成动态码具体包括:

验证用户的身份标识信息是否合法,若是,则检测该用户对应的押金信息或信用度是否满足预先设定的要求,若是,则验证二维码是否为有效二维码;若是,则验证二维码中物联锁信息是否合法,若是,则依据当前时间与所述物联锁信息生成动态码。

优选的,所述接收模块还用于接收所述客户端发送的缴费信息。

本发明实施例还提供一种基于动态码的租车系统,其应用于物联锁,该物联锁锁于车轮上,包括:

密码管理模块,用于当物联锁感应客户端扫码时,依据物联锁内的当前时间与物联锁信息生成开锁密码,并保存开锁密码;

所述密码管理模块,还用于当接收到输入的动态码时,将所述输入的动态码与开锁密码进行匹配;

开锁模块,用于当所述输入的动态码与开锁密码匹配成功时,将物联锁进行开锁;

上传模块,用于当物联锁开锁或关锁成功时,将开锁信息或关锁信息发送至服务器端。

优选的,所述物联锁在预设时间段内保存开锁密码。

优选的,所述密码管理模块具体当用于:

当接收到输入的动态码时,所述物联锁获取预设时间段内的开锁密码;

将所述动态码与所述预设时间段内的开锁密码进行匹配。

优选的,还包括时间管理模块,用于:

物联锁每隔固定时间或预设时长内未开锁,则发送时间较准请求至服务器端以请求时间较准来最终同步时间等。在本实施例中,所述物联锁与所述服务器端之间是建立短连接,所述物联锁每隔预设时间与服务器端同步时间、上报位置、获取配置等。

本发明还提供一种服务器端,如上所述的基于动态码的租车系统,所述服务器端与客户端建立通讯连接,用于接收客户端发送的租车请求,还用于向客户端发送动态码,接收客户端发送的开锁时记录用户行程信息,接收客户端发送的关锁信息时向客户端发送用户行程单,所述租车请求中至少包括用户的信息、定位信息以及物联锁信息。

与现有技术相比,本发明的有益效果如下:本技术方案采用客户端、服务器端以及物联锁与自行车配合,要租车时即可通过移动终端中的客户端将携带有物联锁身份标识的租车请求发送至服务器端,服务器端发送动态码给客户端,若物联锁针对输入的动态码与自身生成的开锁密码匹配成功时,则开锁,即实现租车;要还车时,手动关锁后,物联锁向服务器端发送关锁消息,服务器端生成用户行程单,发送至客户端确认。

整个过程中不需要实体卡,只需移动终端即可,避免了卡容易丢失的情况。且该种方式实现无桩租还车,无范围限制,随用随停,用户骑行至目的地,锁车后服务器端自动结算,线上自动扣款,解决了现有技术中公共自行车系统的诸多缺陷,大大提高了租还车的便捷性。同时本发明可通过匹配动态码与物联锁内部生成的开锁密码来开锁以实现租还车,更安全及使开锁方式的多样化,而且大大降低物联锁能耗。

附图说明

图1为本发明实施例提供的一种基于动态码的租车方法应用于服务器端的流程图;

图2为本发明实施例提供的一种基于动态码的租车方法应用于物联锁的流程图。

图3为本发明实施例提供的服务器端的功能模块图。

图4为本发明实施例提供的物联锁的功能模块图。

具体实施方式

为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

本发明实施例提供的基于动态码的租车方法,涉及客户端、服务器端、物联锁三方,物联锁锁于自行车轮上,租车者为用户,租车者的移动终端中耦合有本实施例所述的客户端,客户端与服务器端通讯连接,服务器端与客户端及物联锁通讯连接。

本发明实施例公开的一种基于动态码的租车方法,其应用于服务器端,如图1所示,包括如下步骤:

s100:服务器端接收客户端发出的租车请求,所述租车请求中至少包括用户的信息、定位信息以及物联锁信息。

用户通过客户端登录服务器端后,向服务器端发送租车请求,所述租车请求中至少包括用户的信息、定位信息以及物联锁信息,在本发明实施例中,作为优选,物联锁信息包含于二维码中,二维码贴于自行车或物联锁上,使得自行车、物联锁、二维码互相对应。采用二维码的方式,提升了操作的便捷性。在其它实施例中,所述物联锁不限于锁于自行车上,还可锁于摩托车等行驶车辆上,当然也可以不限于锁于车轮上。

在本发明实施例中,客户端调用移动终端的扫描设备扫描二维码获取物联锁信息,并获取移动终端的定位信息后,再添加用户的信息后生成租车请求,并把该租车请求发送至服务器端。

s110:服务器端判断租车请求是否满足条件?若满足,则进入步骤s120,否则,结束流程。

本发明实施例中,服务器端判断租车请求是否满足条件主要判断三方面因素,包括用户的信息、二维码以及物联锁信息。具体步骤如下:

b1:服务器端从用户的信息中提取身份标识信息并验证该身份标识信息是否合法,若是,则进入步骤b2,否则结束流程或向客户端发送身份不合法的提示信息。

服务器端接收到租车请求后,首先验证租车请求中的用户的身份标识信息是否合法,即验证该用户是否为本服务器端上的注册用户。

b2:检测该用户对应的押金信息或信用度是否满足预先设定的要求,若是,则进入步骤b3,否则结束流程或向客户端发送押金或信用度不满足要求的提示信息。

基于自行车的成本考虑,以及规范用户的租车行为,需要用户在租车前缴纳一定的押金或提供信用证明。本发明实施例中,优先检测用户的第三方提供的信用基数,若满足服务器端预先设定的信用基数,则进入步骤b3,否则,再检测用户在服务器端上的押金数额,若满足预先设定的数额,则进入步骤b3,否则结束流程或向客户端发送押金或信用度不满足要求的提示信息。

b3:服务器端验证二维码是否为有效二维码;若是,则进入步骤b4,否则结束流程或向客户端发送二维码无效的信息。

在用户的身份信息以及押金或信用度通过验证后,服务器端开始验证二维码是否为有效二维码,即验证收到的二维码是否为在本服务器端存储的二维码。

b4:服务器端提取二维码中物联锁信息并判断所述信息是否合法,若是,则进入步骤s120。当上述验证通过后,验证物联锁信息是否与本服务器端中物联锁信息相同,若是,则服务器端依据当前时间与所述物联锁信息生成动态码,若否,则结束流程或向客户端发送物联锁错误的提示信息。

s120:服务器端依据当前时间与所述物联锁信息生成动态码。

本发明实施例中,当判断租车请求满足条件时,所述服务器端依据查询当前时间,获取当前时间,并从租车请求中提取出相应的物联锁信息,依据获取的服务器端当前时间与提取出的相应的物联锁信息生成相应的动态码。

具体的,如获取的服务器的当前时间为“2017-4-29:20”;所述物联锁信息为“12345678”,对应生成的动态码为“3648”。所述获取的时间格式,物联锁信息编号方式,及动态码的字符组成都不限于上述举例。

s130:服务器端将所述动态码发送至客户端。

本发明实施例中,服务器端与客户端之间通过tcp长连接方式,并采用标准的808协议进行通讯。

s140:当接收到物联锁发出的开锁信息时,服务器端开始记录用户行程信息。

客户端接收到动态码后,用户将所述动态码输入至所述物联锁,当物联锁将所述动态码与物联锁内部的开锁密码匹配成功后控制机械结构开锁,开锁成功时,物联锁向服务器端发送开锁信息。在本实施例中,所述服务器端生成的动态码与所述物联锁内部的开锁密码采用相同加密算法。服务器端接收到物联锁发出的开锁信息,表示租车成功,此时,服务器端开始记录用户的行程信息,至少包括租车成功时的定位信息和开锁时的时间信息。本发明实施例中,为了更好地掌握被租车辆的使用情况,用户的行程信息中还包括自行车使用过程中的gps定位轨迹。

本发明实施例中,服务器端与物联锁之间建立短连接进行通讯,所述物联锁每隔预设时间与服务器端同步时间、上报位置、获取配置等。由于物联锁与服务器端采用短连接通讯方式,可以大大降低物联锁的功耗。具体而言,服务器端发送指令给物联锁开锁的方式在不充电情况下,物联锁可待机大概35天左右,而动态密码锁的情况下,该物联锁的待机时间大概在3年。

s150:当接收到物联锁发出的关锁信息时,服务器端根据用户行程信息生成用户行程单,并将用户行程单发送至客户端。

当用户停止租车时,手动关锁,此时,物联锁向服务器端发送关锁信息,表明租车结束,服务器端根据用户行程信息生成用户行程单,用户行程单中包括用户的信息(包括身份标识信息)、开锁和关锁的时间信息、使用费用信息。使用费用的计算规则可由服务器端的管理方预先设定,本发明实施例中,租车的计费根据使用时间来计算,开锁时间到关锁时间之间的时间段即为租车时间,使用时间乘以单位时间的费用即为最后的使用费用。

s150:服务器端接收客户端发送的缴费信息。

服务器端将用户行程单发送至客户端后,客户端确认付款并将付款信息发送至服务器端,从而完成本次租还车业务。

该发明实施例所公开的基于动态码的租车方法,整个过程中不需要实体卡,只需移动终端即可,避免了卡容易丢失的情况。且该种方式实现无桩租还车,无范围限制,随用随停,用户骑行至目的地,锁车后服务器端自动结算,线上自动扣款,解决了现有技术中公共自行车系统的诸多缺陷,大大提高了租还车的便捷性。同时由于自行车开锁过程中会利用动态码与物联锁内的开锁密码进行匹配以提高自行车的安全性,并丰富了开锁方式。与此同时,此种采用动态码的开锁模式相较传统的通过服务器端发送指令给物联锁开锁的方式可大大降低能耗,具体而言,服务器端发送指令给物联锁开锁的方式在不充电情况下可待机大概35天左右,而动态密码锁待机时间大概在3年。

基于同一发明构思,本发明实施例还提供一种基于动态码的租车方法,其应用于物联锁,所述物联锁锁于车轮上,例如自行车,摩托车,等车可行驶车轮上,如图2所示。

s200:当物联锁感应客户端扫码时,依据物联锁内的当前时间与物联锁信息生成开锁密码,并保存开锁密码。

具体的,所述物联锁内置感应器,当有客户端扫码时,所述物联锁获取物联锁内部计时器计算的当前时间,并获取物联锁信息,并依据所述当前时间与物联锁信息生成开锁密码。所述开锁密码也是一组编码,可以是数字,字母或其它字符形式。所述物联锁信息指的物联锁的id。

与此同时,所述生成的开锁密码会保存在所述物联锁中一段预设时长,例如,一分钟、二分钟等,其中所述预设时长可依据具体情况进行相应设置。由于后返回给租车用户。将所述开锁密码保存预设时长是一种容错机制,由于服务器端时间可能和物联锁内部时间有几秒的误差时间,所以物联锁内部会保存当前一分钟的密码,并且会保存前后两分钟对应的密码,用来解决时间误差问题和用户操作开锁时间,保证用户能正常开锁。

s220:当接收到输入的动态码时,将所述输入的动态码与开锁密码进行匹配。

客户端接收到服务器端发送的动态码后,用户可将所述动态码通过手动等方式输入至物联锁,所述物联锁会将所述动态码与当前物联锁内生成的开锁密码进行匹配。其具体包括:

b’1.当接收到输入的动态码时,所述物联锁获取预设时间段内的开锁密码;

b’2.将所述动态码与所述预设时间段内的开锁密码进行匹配。

s230:当所述输入的动态码与开锁密码匹配成功时,将物联锁进行开锁。

客户端接收到动态码后,用户将所述动态码输入至所述物联锁,当物联锁将所述动态码与物联锁内部的开锁密码匹配成功后控制机械结构开锁。

s240:当物联锁开锁或关锁成功时,将开锁信息或关锁信息发送至服务器端。

开锁成功时,物联锁向服务器端发送开锁信息;另一方面,当关锁成功时,物联锁也会向服务器端发送关锁信息。

基于同一发明构思,本发明实施例还提供了服务器端的模块示意图,如图3所示,包括接收模块30,用于接收客户端发出的租车请求,所述租车请求中至少包括用户的信息、定位信息以及物联锁信息;

处理模块32,用于判断租车请求是否满足条件,并在满足条件时,则依据当前时间与所述物联锁信息生成动态码;

发送模块35,用于将所述动态码发送至客户端;

所述处理模块32,还用于当所述接收模块30接收到物联锁发出的开锁信息时,开始记录用户行程信息;

所述处理模块32,还用于当接收模块30接收到物联锁发出的关锁信息时,依据用户行程信息生成用户行程单,并通过发送模块将用户行程单发送至客户端。

所述用户行程信息至少包括定位信息和开锁时的时间信息,所述用户行程单至少包括所述用户行程信息、关锁时的时间信息、用户的身份标识信息以及使用费用信息。

所述处理模块判断租车请求是否满足条件,并在满足条件时,依据当前时间与所述物联锁信息生成动态码具体包括:

验证用户的身份标识信息是否合法,若是,则检测该用户对应的押金信息或信用度是否满足预先设定的要求,若是,则验证二维码是否为有效二维码;若是,则验证二维码中物联锁信息是否合法,若是,则依据当前时间与所述物联锁信息生成动态码。

所述接收模块还用于接收所述客户端发送的缴费信息。

在本发明实施例中,所述服务器端具体为服务器,所述服务器包括:

至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明实施例中所述的基于动态码的租车方法。

所述服务器端与客户端建立通讯连接,用于接收客户端发送的租车请求,还用于向客户端发送动态码,接收客户端发送的开锁时记录用户行程信息,接收客户端发送的关锁信息时向客户端发送用户行程单,所述租车请求中至少包括用户的信息、定位信息以及物联锁信息。服务器端在用户扫码租车并验证通过时生成动态码,用户在锁上输入所述动态码后,物联锁根据算法进行校验,认证通过即开锁。

此种采用动态码的开锁模式相较传统的通过服务器端发送指令给物联锁开锁的方式可大大降低能耗,具体而言,服务器端发送指令给物联锁开锁的方式在不充电情况下可待机大概35天左右,而动态密码锁待机时间大概在3年。

基于同一发明构思,本发明实施例还提供了物联锁的模块示意图,如图4所示,其具体包括:

密码管理模块40,用于当物联锁感应客户端扫码时,依据物联锁内的当前时间与物联锁信息生成开锁密码,并保存开锁密码;

所述密码管理模块40,还用于当接收到输入的动态码时,将所述输入的动态码与开锁密码进行匹配;

开锁模块42,用于当所述输入的动态码与开锁密码匹配成功时,将物联锁进行开锁;

上传模块45,用于当物联锁开锁或关锁成功时,将开锁信息或关锁信息发送至服务器端。

所述物联锁在预设时间段内保存开锁密码。

所述密码管理模块40具体当用于:

当接收到输入的动态码时,所述物联锁获取预设时间段内的开锁密码;

将所述动态码与所述预设时间段内的开锁密码进行匹配。

所述物联锁还包括时间管理模块,用于:

物联锁每隔固定时间或预设时长内未开锁,则发送时间较准请求至服务器端以请求时间较准。例如,每隔8小时,或当检测到4小时内物联联未被打开时,则时间管理模块自动发送较准请求至服务器端以请求时间较准,以确定物联锁与服务器端时间一致。在本实施例中,所述物联锁与所述服务器端之间是建立短连接,所述物联锁每隔预设时间与服务器端同步时间、上报位置、获取配置等。

本实施例中的用户形成信息和用户行程单与上文所述一致,故不再赘述。所述客户端还用于向服务器端发送缴费信息。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本发明实施例的基于动态码的租车系统服务器中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1